我最近開始通過閱讀LearnYouAHaskell和從互聯網上隨機發表的文章開始學習Haskell。Haskell中的任何類型?
我很難理解更復雜的函數類型。
我明白一些例子。
> :t map
map :: (a -> b) -> [a] -> [b]
它需要的功能(這需要一個並給出了B,即A和B可以是不同類型的)和一個公司的名單,並返回b的列表。
> :t fst
fst :: (a, b) -> a
獲取2個元素的元組(允許不同類型)並返回第一個元素。
> :t any
在更高的層次上,我明白了any
。它接受一個函數和一個列表,並且如果任何列表條目對於該特定函數返回true,則返回true。我也在Python和JavaScript中使用過它。
問題
我不明白如何
any :: Foldable t => (a -> Bool) -> t a -> Bool
翻譯成以上。(a -> Bool)
是謂詞。引用一個參數並返回true或false。t a -> Bool
布爾是任何的最終結果。根據我的理解t和a表示謂詞和列表。他們爲什麼不通過->
分離如何去一般的理解類型簽名,以及如何深入挖掘,這樣我可以接近他們自己?
謝謝。是不是像((方程a)')那樣包含類型類? –
如果只有一個類型類型,可以省略這個paran .. parenth ..函數簽名中的'()'thingies。 – Krom
+1指出'[a]'只是將類型構造函數'[]'應用於類型變量'a'的一種特殊形式,它使用變量'[]'替換字面值'[]',這更容易理解。 – chepner