Regarde le modèle objet de OCaML, là c'est simple, c'est invariant. L'héritage est réduit à sa plus simple expression de ne pas recopier le code, mais lorsqu'il s'agit de mettre B là où il attend A, même si B hérite de A, le compilateur te jette tout de suite !
Non, c'est faux, on peut utiliser une forme de convertibilité en OCaml (et les types paramétrés peuvent porter une indication de variance sur chacun de leurs paramètres, qui est inférée selon leur définition quand c'est possible). La théorie est un peu différente, et surtout il faut demander la coercion vers A explicitement (on écrit (foo :> ty) ou (foo : t1 :> t2)), mais c'est tout à fait possible.
typet=<data:int>let(li:tlist)=[]letobj=objectmethoddata=4methodfoo=()end(* val obj : < data : int; foo : unit > *)lettest=(obj:>t)::li(* val test : t list = [<obj>] *)typeempty=<>lettest2=(test:>emptylist)(* val test2 : empty list *)
[^] # Re: Encore le type Null...
Posté par gasche . En réponse à la dépêche Dart va‐t‐il remplacer JavaScript comme langage dans les navigateurs ?. Évalué à 1.
Non, c'est faux, on peut utiliser une forme de convertibilité en OCaml (et les types paramétrés peuvent porter une indication de variance sur chacun de leurs paramètres, qui est inférée selon leur définition quand c'est possible). La théorie est un peu différente, et surtout il faut demander la coercion vers A explicitement (on écrit
(foo :> ty)ou(foo : t1 :> t2)), mais c'est tout à fait possible.