Haskell elem 函数定义有 ta 你能解释一下吗

Jul*_*ian 3 haskell

我正在查看 function 的类型注释elem。它看起来像这样:

elem :: Eq a => a -> t a -> Bool 
Run Code Online (Sandbox Code Playgroud)

我知道这Eq a =>是一个类型约束。所以a必须支持==

但我不明白t a,这是从哪里来t的?它有什么作用?为什么有必要?

链接:https ://hackage.haskell.org/package/base-4.16.0.0/docs/Prelude.html#v:elem

Wil*_*sem 6

t一个Foldable类型类,因为它是在Foldableclass中定义的,所以签名是:

elem :: (可折叠 t , Eq a) => a -> t a -> Bool

elem因此不仅适用于列表 (where t ~ []),还适用于任何Foldable、 so t ~ Maybet ~ NonEmptyt ~ Tree等。它的默认实现是 [src]

elem :: Eq a => a -> t a -> Bool
elem = any . (==)
Run Code Online (Sandbox Code Playgroud)

因此,它检查 的任何元素是否Foldable等于查询元素。

因此,这意味着它也可以用于例如Maybe a可以Nothing被视为空集合的集合,以及Just x具有一个元素的集合:x,或者例如查看该元素是否是玫瑰树中的值之一Tree a

  • 现在我明白了“t”来自“class Foldable t where”。 (3认同)