【发布时间】:2016-09-26 10:08:33
【问题描述】:
*Main> do 0
0
*Main> do return 0
0
*Main> do (Just 0)
只有0
*Main> do return (Just 0)
只有0
*Main> do Nothing
什么都没有
*Main> do return Nothing
什么都没有
bareDo :: a -> a
bareDo x = do x
doReturn :: Monad m => a -> m a
doReturn x = do return x
为什么do x 和do return x 会评估相同的值,什么时候不会?
我正在尝试理解Monad,教程已经足够了,discussion 在那里但我无法理解。
这甚至是post 写作
不要阅读 monad 教程。
所以,我想弄脏我的手可能会有所帮助。
我非常感谢帮助我离开这里的人(我的意思是 do 和 return,而不是 Monad。我知道这需要几天时间)。
【问题讨论】:
-
提示:使用 ghci
:t命令并找出自己 :-) 即:t do 0或:t do return 0有不同的类型。最后do是语法糖,见en.wikibooks.org/wiki/Haskell/do_notation -
@jarandaf
do return 0 :: (Num a, Monad m) => m a,m去哪儿了?