为免费monad定义翻译

z1n*_*Y5A 2 free-monad purescript

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")
Run Code Online (Sandbox Code Playgroud)

如何定义和运行返回类型为Array Int或的其他解释器State String Int

gb.*_*gb. 5

您无法解释为特定的值,因为解释器是自然转换-提供的forall a. f a -> g a。该a由是做解释的功能在这里不能“感动”。

您可以解释为ArrayState String,但是a将始终由您要解释的结构确定。如果您知道您只想解释,Free MyAlgebra Int -> Array Int那么无论如何都可以解决。

  • 使用`Writer(Sum Int)`进行解释。 (2认同)