Monad-进阶理解
一 一个例子(按此贴的理解:http://blog.csdn.net/crazyhacking/article/details/8270930)
定义:
data Position t=Position t deriving (Show)
stagger (Position d)=Position (d+2)crawl (Position d)=Position (d+1)
rtn x=x
x>>==f=f x
使用:
treasure pos=pos>>==
stagger >>==
stagger >>==
crawl>>==
rtn
运行:
treasure (Position 0)
Position 5
it :: Position Integer
理解:
1 从这个例子上来说,可以把monad视为对一堆函数的封装。
>>== rtn 是这种封装的标志。
2 >>==是类型下降,rtn是类型提升。(二者均不是关键字)
>>==首先把类型Position d中取出d进行计算,最后rtn又把d提升为Position d.
参考:http://blog.pmonad.com/2012/07/06/monad-purpose.html