bon, j'ai pas tout suivi, et j'ai eu du mal à comprendre certains trucs.
Dans tous les langages que je connais, y compris OCaml, si le message/fonction n'existe pas pour le type, le compilateur répond qu'il ne sait pas quoi faire.
Je n'ai jamais vu le pattern de raisonnement mafonction : ELEMENT1 -> ELEMENT2 => mafonction : COLLECTION[ELEMENT1] : COLLECTION[ELEMENT2].
tu veux dire un map généralisé? en haskell, c'est vraiment tout simple :
Prelude> let f x = x + 1
Prelude> fmap f [1,2,3]
[2,3,4]
Prelude> fmap f (Just 5)
Just 6
Prelude> :t fmap
fmap :: (Functor f) => (a -> b) -> f a -> f b
En gros, ca veux dire que si tu veux que ton type fasse partie du typeclass Functor, tu dois implémenter fmap. Ensuite, fmap s'applique sur toute valeur dont le type fait partie de la typeclass Functor. Ici, les types liste et Maybe (équivalent de l'option en OCaml, un résultat ou pas de résultat).
Beaucoup de types font partie de cette typeclass (et aussi la typeclass monad, mais ca devient un poil plus compliqué). Tu peux bien sur faire de même pour tes nouveau types.
# haskell
Posté par TeXitoi (site web personnel) . En réponse au journal Perl, Javouille, Lisaac|(Ruby|SmallTalk|etc..). Évalué à 5.
Dans tous les langages que je connais, y compris OCaml, si le message/fonction n'existe pas pour le type, le compilateur répond qu'il ne sait pas quoi faire.
Je n'ai jamais vu le pattern de raisonnement mafonction : ELEMENT1 -> ELEMENT2 => mafonction : COLLECTION[ELEMENT1] : COLLECTION[ELEMENT2].
tu veux dire un map généralisé? en haskell, c'est vraiment tout simple :
Prelude> let f x = x + 1Prelude> fmap f [1,2,3]
[2,3,4]
Prelude> fmap f (Just 5)
Just 6
Prelude> :t fmap
fmap :: (Functor f) => (a -> b) -> f a -> f b
En gros, ca veux dire que si tu veux que ton type fasse partie du typeclass Functor, tu dois implémenter fmap. Ensuite, fmap s'applique sur toute valeur dont le type fait partie de la typeclass Functor. Ici, les types liste et Maybe (équivalent de l'option en OCaml, un résultat ou pas de résultat).
Beaucoup de types font partie de cette typeclass (et aussi la typeclass monad, mais ca devient un poil plus compliqué). Tu peux bien sur faire de même pour tes nouveau types.