Home > Back-end >  Haskell elem function definition has t a can you explain that
Haskell elem function definition has t a can you explain that

Time:02-22

I was looking at the type annotation of function elem. It looked like this:

elem :: Eq a => a -> t a -> Bool 

I understand that Eq a => is a type constraint. So a must support ==.

But I don't understand t a, where does this t came from ? What does it do? Why is it necessary?

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

CodePudding user response:

The t is a Foldable typeclass, since it is defined in the Foldable class, so the signature is:

elem :: (Foldable t, Eq a) => a -> t a -> Bool

elem thus not only works on a list (where t ~ []), but on any Foldable, so t ~ Maybe, t ~ NonEmpty, t ~ Tree, etc. Its default implementation is [src]:

elem :: Eq a => a -> t a -> Bool
elem = any . (==)

It thus checks if any element of the Foldable is equal to the query element.

This thus means that it can also work for a Maybe a for example where Nothing can be seen as an empty collection, and Just x as a collection with one element: x, or for example look if the element is one of the values in a rose tree Tree a.

  • Related