[英]What is the type of Haskell's bind function?
一個非常受歡迎的monad解釋如下:
http://blog.sigfpe.com/2007/04/trivial-monad.html
除了這部分我得到的一切:
bind :: (a -> W b) -> (W a -> W b)
bind f (W x) = f x
我有Haskell的基本知識(很長一段時間沒用過它),但這個簽名看起來不對。
我安裝了GHC並檢查了它的想法 - 結果它認為我做了什么,即:
:t bind
bind :: (t1 -> t) -> W t1 -> t
我錯過了什么?
Haskell的類型推斷器總是考慮最一般的簽名。 因為在你的bind
實現中,你沒有做任何給出參數f
東西比任何類型的函數更具體到任何其他類型(不是特別是W b
),即有一個簽名a -> b
(或t1 -> t
,正如推薦人寫的那樣),當然它就是這樣。
換句話說,簽名(a -> b) -> W a -> b
是(a -> W b) -> (W a -> W b)
的嚴格更一般的版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.