我正在查看 function 的型別注釋elem。它看起來像這樣:
elem :: Eq a => a -> t a -> Bool
我知道這Eq a =>是一個型別約束。所以a必須支持==。
但我不明白t a,這t是從哪里來的?它有什么作用?為什么有必要?
鏈接:https ://hackage.haskell.org/package/base-4.16.0.0/docs/Prelude.html#v:elem
uj5u.com熱心網友回復:
t是一個Foldable型別類,因為它是在類中定義的,Foldable所以簽名是:
elem :: (可折疊 t , Eq a) => a -> t a -> Bool
elem因此不僅適用于串列 (where t ~ []),而且適用于任何Foldable, so t ~ Maybe, t ~ NonEmpty,t ~ Tree等。它的默認實作是 [src]:
elem :: Eq a => a -> t a -> Bool elem = any . (==)
因此,它檢查是否有任何元素Foldable等于查詢元素。
因此,這意味著它也可以Maybe a用于例如Nothing可以被視為空集合的地方,以及Just x具有一個元素的集合:x,或者例如查看元素是否是玫瑰樹中的值之一Tree a。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/431373.html
標籤:哈斯克尔
