C'est un devoir, donc je préférerais seulement des conseils ou un lien vers où je peux apprendre plutôt qu'une réponse complète. Voici ce que l'on me donne:
allEqual :: Eq a => a -> a -> a -> Bool
Ce que je comprends de cela, c'est que je suis censé comparer 3 valeurs (dans ce cas a
, a
, a
?) Et retourner si elles sont toutes égales ou non . Voici ce que j'ai essayé:
allEqual :: Eq a => a -> a -> a -> Bool
allEqual x y z do
Bool check <- x == y
Bool nextC <- y == z
if check == nextC
then True
else False
Je me sens honnêtement complètement perdu avec Haskell, donc tout conseil sur la façon de lire les fonctions ou de les déclarer serait extrêmement utile.
allEqual :: Eq a => a -> a -> a -> Bool
La signature dit: allEqual
consomme 3 valeurs de type a
; il produit un résultat de type Bool
. Le Eq a =>
part limite les opérations possibles que a
peut avoir; il indique quel que soit le type a
, il doit satisfaire les exigences définies dans Eq
. Vous pouvez trouver ces exigences ici: http://hackage.haskell.org/package/base-4.12.0.0/docs/Prelude.html#t:Eq Vous savez maintenant quelles opérations a
peut faire, vous pouvez alors terminer votre fonction en suivant la signature de type.
Voici comment procéder:
allEqual :: Eq a => a -> a -> a -> Bool
allEqual x y z = x == y && y == z
La première ligne définit la fonction signature de type.
En termes humains, cela dirait quelque chose comme:
Il existe une fonction appelée
allEqual
pour tout typea
. Il nécessite une instance deEq a
* et prend trois paramètres, tous de typea
, et renvoie unBool
La deuxième ligne dit:
La fonction
allEqual
, pour tous les paramètresx
,y
etz
, doit évaluerx == y && y == z
, qui compare simplement quex
est égal ày
ety
est égal àz
.
* Les instances ou les classes de types sont une fonctionnalité de langage que peu d'autres langages de programmation ont, donc si vous ne comprenez pas ce qu'elles signifient, je suggérerais d'abord de les connaître.