为自由 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 Int
或 State String Int
的解释器?
您无法解释为特定值,因为解释器是作为自然转换提供的 - forall a. f a -> g a
。这里的a
不能被正在做解释的函数"touched"
您可以解释为 Array
或 State String
,但 a
将始终由您解释的结构决定。如果你知道你只想解释 Free MyAlgebra Int -> Array Int
那么这一切都会成功。
在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 Int
或 State String Int
的解释器?
您无法解释为特定值,因为解释器是作为自然转换提供的 - forall a. f a -> g a
。这里的a
不能被正在做解释的函数"touched"
您可以解释为 Array
或 State String
,但 a
将始终由您解释的结构决定。如果你知道你只想解释 Free MyAlgebra Int -> Array Int
那么这一切都会成功。