3 votes

Haskell elem function definition has t a pouvez-vous expliquer que

Je regardais l'annotation de type de la fonction elem . Ça ressemblait à ça :

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

Je comprends que Eq a => est une contrainte de type. Ainsi, a doit soutenir == .

Mais je ne comprends pas t a où est-ce que cela t vient de ? Que fait-il ? Pourquoi est-il nécessaire ?

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

5voto

CommuSoft Points 6439

En t es un Foldable puisqu'elle est définie dans la classe de type Foldable classe donc la signature est :

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

elem fonctionne donc non seulement sur une liste (où t ~ [] ), mais sur tout Foldable Así que t ~ Maybe , t ~ NonEmpty , t ~ Tree etc. Son site L'implémentation par défaut est [src] :

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

Il vérifie donc si un élément du Foldable est égal à l'élément de la requête.

Cela signifie donc qu'il peut également fonctionner pour une Maybe a par exemple où Nothing peut être vu comme une collection vide, et Just x comme une collection avec un élément : x ou, par exemple, regardez si l'élément est l'une des valeurs d'un rosier. Tree a .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X