fmap 小心得
由
fmap::(a->b)->f a->f b---[0]
令b = m b,f = m
得到以下结果
fmap::(a->m b)->m a->m(m b)----[1]
(>>=)::Monad m=>m a->(a->m b)->m b
x >>= f = join (fmap f x)
先运行
fmap f x
f类型是(a->m b)
x类型是m a
于是根据【1】得知返回的是m(m b)
又因为>>=定义的结果返回的是m b
得到的结果是
join m(m b) = m b
以上纯属瞎编
看这里http://www.yi-programmer.com/blog/2010-04-06_haskell_and_category_translate.html#monads
fmap::(a->b)->f a->f b---[0]
令b = m b,f = m
得到以下结果
fmap::(a->m b)->m a->m(m b)----[1]
(>>=)::Monad m=>m a->(a->m b)->m b
x >>= f = join (fmap f x)
先运行
fmap f x
f类型是(a->m b)
x类型是m a
于是根据【1】得知返回的是m(m b)
又因为>>=定义的结果返回的是m b
得到的结果是
join m(m b) = m b
以上纯属瞎编
看这里http://www.yi-programmer.com/blog/2010-04-06_haskell_and_category_translate.html#monads