• [^] # Re: simple ?

    Posté par . En réponse au journal Rust en version 0.12. Évalué à 4.

    join, dans le module Control.Monad, c’est le join classique de monades. Haskell a choisit d’utiliser bind et return, mais on pourrait utiliser join à la place. Dans tous les cas passer de l’un à l’autre est assez simple:

    join :: Monad m => m (m a) -> ma
    join = (>>= id)

    Dans l’exemple que je donne plus haut, on tient compte du fait que (->) r soit une instance de Monad, pour laquelle join soit applicable, avec pour définition :

    instance Monad ((->) r) where
     return = const
     m >>= f = \x -> f (m x) x

    On a (*) : Num a => a -> a -> a, donc (*) est une instance de Monad pour Num a => (->) a. Puisque join = (>>= id), alors join (*) = id >>= (*) = \x -> (*) (id x) x = \x -> (*) x x = \x -> x * x, soit un fonction qui prend un nombre en argument et retourne sa valeur multipliée par elle-même.