2017-07-25 30 views
3

特別是,我的問題是關於如何認爲這等同於f本身?返回> => f如何在Haskell中工作?

我們知道這種類型的return是:: a -> m a>=>類型是:: (a -> m b) -> (b -> m c) -> (a -> m c)所以,當我們申請>=>return和f,不會有成爲一個類型不匹配,因爲不會,我們有(a -> m a) -> (b -> m c)爲分別爲return和f的類型,這意味着我們現在甚至可以應用>=>

回答

8

讓我們重命名某些類型的變量,以避免混淆:

return :: a -> m a 
(>=>) :: (b -> m c) -> (c -> m d) -> (b -> m d) 

在申請(>=>) return,我們需要

(a -> m a) = (b -> m c) 

(的return>=>的第一個參數的類型類型)。

因此,我們有

a = b 
a = c 

(因此b = c,太)。

然後

(>=>) return :: (c -> m d) -> (b -> m d) 
a = b 
a = c 

這是

(>=>) return :: (a -> m d) -> (a -> m d) 

所以只要f :: a -> m d,我們可以應用到(>=>) returnf得到相同類型的值返回。

相關問題