为什么要隐藏“视图”数据结构和相关的运算符Control.Monad.Free
等?purescript-free
FreeView
toView
使用通常的 Free Monad 公式 -
data Free f a = Pure a | Free (f (Free f a))
并给定一个仿函数,例如-
data TeletypeF a = PutStrLn String a | GetLine (String -> a)
我可以编写一些简单(虽然丑陋)的代码来折叠链式 PutStrLn 调用,如下所示 -
collapseChained :: Free TeletypeF a -> Free TeletypeF a
collapseChained (Free (PutStrLn s1 (Free (PutStrLn s2 c)))) = Free PutStrLn (s1 ++ s2) c
collapseChained f = f
在不使用任何实际数据构造函数的情况下,是否collapseChained
可以使用 Purescript 导出的函数?Control.Monad.Free