2017-04-24 79 views
1

purescript-free包,有一个代码示例定义这个解释:定义的解释为自由单子

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

我怎么可以定义并运行另一个解释其中的返回类型为Array IntState String Int

回答

3

不能解释为特定值,口译作为自然变换提供 - forall a. f a -> g a。这里的a无法通过做解释的功能“感动”。

您可以解释为ArrayState String,但a将始终由您正在解释的结构决定。如果你知道你只是想解释Free MyAlgebra Int -> Array Int那么这将所有的工作还行吧。

+0

你会如何编写一个计算元素数量的解释器?任何'a'都不能表示纯“0”。 – z1naOK9nu8iY5A

+2

使用'Writer(Sum Int)'解释。 –

+1

谢谢。我认为你的意思是'Writer(Additive Int)'。 – z1naOK9nu8iY5A