爲>>=
類型簽名如下:也許單子和>> =
(>>=) :: Monad m => m a -> (a -> m b) -> m b
及以下有意義的我(這也是單子法律之一):
(>>=) (Just 1) (id . return) == Just 1
然而,前奏給出以下內容:
Prelude> :t (>>=) (Just 1) id
(>>=) (Just 1) id :: Num (Maybe b) => Maybe b
我會預料前奏曲返回一些錯誤爲typ身份證上的簽名是(a -> a)
而不是Monad m => (a -> m b)
。
有理解這裏發生了什麼的好方法嗎? (>>=) (Just 1) id
有沒有用?
它可能有助於注意到'm >> = id'等同於'join m','join'具有簽名'Monad m => m(m a) - > m a'。 – 2015-02-12 07:43:50
他們似乎略有不同,不是嗎? '''(>> =)只要1 $ id :: Num(也許(a - > a) - >(a - > a) - > b)=> b'''與'''join(只有1) :: Num(也許a)=>也許a''' – abhillman 2015-02-12 07:47:36
你需要更多的括號:'(>> =)(只是1)$ id'應該是相同的。 – 2015-02-12 07:49:52