50 votes

Pouvez-vous surcharger + en haskell ?

Bien que j'aie vu toutes sortes de choses étranges dans l'exemple de code Haskell, je n'ai jamais vu d'opérateur et d'être surchargé. Y a-t-il quelque chose de spécial à ce sujet ?

Disons que j'ai un type comme Pair et que je veux avoir quelque chose comme

  Pair(2,4) + Pair(1,2) = Pair(3,6)

Peut-on le faire en haskell ?

Je suis juste curieux, car je sais que c'est possible dans Scala d'une manière plutôt élégante.

7voto

yihuang Points 131

Si vous ne voulez que l' (+) plutôt que tous les opérateurs Num , vous avez probablement une Monoid , par exemple Monoid instance of pair est comme ça:

 class (Monoid a, Monoid b) => Monoid (a, b) where
    mempty = (mempty, mempty)
    (a1, b1) `mappend` (a2, b2) = (a1 `mappend` a2, b1 `mappend` b2)

Vous pouvez faire de (++) un alias de mappend , puis vous pouvez écrire du code comme ceci :

 (1,2) ++ (3,4) == (4,6)
("hel", "wor") ++ ("lo", "ld") == ("hello", "world")

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