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)