为免费monad定义翻译

时间:2017-04-24 17:40:57

标签: purescript free-monad

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的其他解释器?

1 个答案:

答案 0 :(得分:5)

您无法解释为特定值,因为解释器是作为自然变换提供的 - forall a. f a -> g a。这里的a不能被正在进行解释的函数“触及”。

您可以解释为ArrayState String,但a将始终由您正在解释的结构决定。如果您知道自己只想解释Free MyAlgebra Int -> Array Int,那么无论如何都会解决这个问题。