在頁面http://en.wikibooks.org/wiki/Haskell/do_Notation上,有一種非常方便的方法來將do語法綁定到函數形式(我的意思是使用>> =)。它非常適用不少情況下,直到我遇到了一段代碼,涉及職能單子(( - >)R)將語法轉換爲>> = with(( - >)r)monad
的代碼是
addStuff :: Int -> Int
addStuff = do
a <- (*2)
b <- (+10)
return (a+b)
這相當於爲定義
addStuff = \x -> x*2+(x+10)
現在,如果我用方便的方法重寫做兼職,我得到
addStuff = (*2) >>= \a ->
(+10) >>= \b ->
a + b
這給編譯埃羅河我知道a,b是Int(或其他類型的Num),所以最後一個函數(\ b - > a + b)的類型是Int - > Int,而不是Int - > Int - > Int。
但是,這是否意味着並不總是有一種方法可以從do轉換爲>> =?有沒有解決這個問題?或者我只是不正確地使用規則?
我看到這個作品。但重點可能不是格式,而是將Int包裹到(Int - > Int)的返回值。不管怎麼說,還是要謝謝你! – 2014-12-19 06:16:38
是的,你是對的。也感謝你。 – 2014-12-19 06:24:06