• [^] # Re: Un peu déçu par Rust

    Posté par . En réponse au journal Un print(1 + "3a"), ça nous inspire comment ?. Évalué à 3.

    En même temps, undefined pouvant se faire passer pour n’importe lequel, quel critère proposes-tu pour que le compilateur détermine le bon type à la compilation ?

    C'était pas pour critiquer Haskell, c'était juste pour pour souligner cette différence entre Haskell et OCaml.
    Le fait est que le système de type de Haskell est beaucoup plus puissant que celui d'OCaml, et ce n'est pas gratuit...

    Le problème en l’occurrence ne vient pas de l'existence du "undefined" d'haskell, je m'en suis servi ici pour simplifier l'exemple. J'aurais pu écrire :

    class Num a => Claaaasse a where
     claaaasse :: a -> IO ()
    instance Claaaasse Int where
     claaaasse _ = putStrLn "Je suis un Int"
    instance Claaaasse Integer where
     claaaasse _= putStrLn "Je suis Integer"
    main = claaaasse 1

    En fait, un programme aussi simple que :

    main = print 1

    Soulève le problème. "1" a un type polymorphe : Num t => t, autrement dit, est que c'est un Int, un Integer ? un Float, un Rational ? Un entier de peano défini par l'utilisateur ? Bon, le compilo n'est pas si chiant, il compile quand même, mais avec les warning il précise quand même qu'il "Defaulting the following constraints to type ‘Integer’"

    Il y a un mécanisme de résolution par défaut dont je ne connais pas le fonctionnement.