为自由 monad 定义解释器

Defining an interpreter for the 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")

如何定义 运行 另一个 return 类型为 Array IntState String Int 的解释器?

您无法解释为特定值,因为解释器是作为自然转换提供的 - forall a. f a -> g a。这里的a不能被正在做解释的函数"touched"

您可以解释为 ArrayState String,但 a 将始终由您解释的结构决定。如果你知道你只想解释 Free MyAlgebra Int -> Array Int 那么这一切都会成功。