2011-12-31 50 views
13
class Monad m where 
    return :: a -> m a 
    (>>=) :: m a -> (a -> m b) -> m b 
    (>>) :: m a -> m b -> m b 
    m >> n = m >>= \_ -> n 

    fail :: String -> m a 

我從來沒有在類型類中看過方程(或函數聲明?)。爲什麼類型類中有一個方程式?在monad的聲明中,lambda表示法「m >> n = m >> = _ - > n」的這個方程是什麼?

我知道_是用於匹配任何東西的術語。但是什麼m >> = \ _ - > n匹配?

+1

我剛剛意識到** \\ _ - > n **會拋出第一個參數。 – snow 2011-12-31 19:56:43

回答

17

這是該方法的默認實現。除非您的實例聲明包含明確的實現(>>),否則這就是將要使用的定義。如果某些方法可以使用另一種方法實現,則默認方法很普遍,但對於某些數據類型,可能會有更高效的實現。

m >>= \_ -> n 

指「結果」的m被饋送到忽略其參數,並返回n不管功能。這也可以寫成

m >>= const n 

在單子與影響的背景下,這是「不m有效果,卻忽略了返回值,然後做n」。這就是(>>)是要在那裏做的。

相關問題