2017-04-24 5 views
1

Dans l'ensemble purescript-free, il est un exemple de code définissant cet interprète:Définition d'un interprète pour la monade sans

teletypeN :: forall eff. NaturalTransformation TeletypeF (Eff (console :: CONSOLE | eff)) 
teletypeN (PutStrLn s a) = const a <$> log s 
teletypeN (GetLine k) = pure (k "fake input") 

Comment puis-je définir et exécuter un autre interprète où le type de retour est Array Int ou State String Int?

Répondre

3

Vous ne pouvez pas interpréter à une valeur spécifique, car les interprètes sont fournis comme des transformations naturelles - forall a. f a -> g a. Le a ici ne peut pas être "touché" par la fonction qui fait l'interprétation.

Vous pouvez interpréter à Array ou State String, mais le a sera toujours déterminé par la structure que vous interprétez. Si vous savez que vous voulez seulement interpréter Free MyAlgebra Int -> Array Int alors tout cela fonctionnera quand même.

+0

Comment écrivez-vous un interprète qui compte le nombre d'éléments? 'pure 0' ne peut être exprimée pour aucun' a'. – z1naOK9nu8iY5A

+2

Interprétez en utilisant 'Writer (Sum Int)'. –

+1

Merci. Je pense que vous voulez dire 'Writer (Additive Int)'. – z1naOK9nu8iY5A