作者suhorng ( )
看板PLT
标题[问题] Free Monad 是怎麽来的?
时间Wed Oct 30 00:17:26 2013
最近看code时, 看到好几个的地方都出现 free monad:
http://www.haskellforall.com/2013/06/
from-zero-to-cooperative-threads-in-33.html
Data types `a la carte 最後考虑结合monad也只考虑free monad (因为结构最少?)
Extensible Effects推到後来他拿来包 effect 的 monad 型别
data VE r w = Val w | E (Union r (VE r w))
看起来也有几分像 free monad (Union是某个由 r indexed 的 coproduct)
而且後来举的 coroutine 例子
type CoT a m = ContT (Y m a) m
data Y m a = Done | Y a (() -> m (Y m a))
虽然前面 Done 那项不太一样, 但後面 Y 那里一样有递回, 也是丢进 m 里面
我只知道 free monad 是当我们想要给一个 functor F 多加上
monad 的结构时所自然衍生出来的东西,
不过那个结构[aka. data Free f a = Pure a | Impure (f (Free f a))]
到底要怎麽推出来呢...?
这个定出来以後 instance 怎麽写就比较好猜了..虽然还是很神奇QQ
[1]关於free monad
http://stackoverflow.com/questions/13352205/
-
另外有人听过 codensity monad 吗?
查不太到什麽资料orz...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.166.53.15
1F:推 xcycl:那个结构其实可以看 free monoid 的构造 10/30 07:42
2F:→ xcycl:构造 free monoid 的时候可以用递归的方式层层迭代 10/30 07:43
3F:→ xcycl:每一次加进一层 operation 10/30 07:46