Purescript 为自由单子定义解释器
在Purescript 为自由单子定义解释器,purescript,free-monad,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") teletypeN::forall eff。自然转换电
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")
teletypeN::forall eff。自然转换电传打字机(Eff(控制台::控制台| Eff))
电传打字机(PutStrLn s a)=常数a日志s
电传打字机(GetLine k)=纯(k“假输入”)
当返回类型为
Array Int
或State String Int
时,如何定义和运行另一个解释器?您不能解释为特定值,因为解释器是作为自然转换提供的-用于所有a。f a->g a
。此处的a
不能被执行解释的函数“触碰”
您可以解释为
数组
或状态字符串
,但a
始终由您正在解释的结构决定。如果您知道您只想解释Free MyAlgebra Int->Array Int
,那么这一切都会解决。您将如何编写一个计算元素数量的解释程序<代码>纯0不能表示为任何a
。请使用Writer(Sum Int)
进行解释。谢谢。我想你的意思是Writer(加法Int)
。