Hi Grégoire, It's not directly possible in OCaml, but there are at least three methods for doing what you want. The first one is to wrap your integers behind a constructor, e.g. type user_id = User of int type movie_id = Movie of int let a = User 57 and b = Movie 80 in if a = b then ... This is the technique often used by Haskellites. Variant on the topic: use singleton records instead of singleton sums. The second one is to make use of modules and abstract types, e.g. module User = struct type id = int let id_of_int x = x ... end : sig type id (*Abstract type*) val id_of_int : int -> id end (*same for b*) let a = User.id_of_int 57 and b = User.id_of_int 80 in if a = b then ... This is probably the most common technique in OCaml, as it fits well with functorization. Finally, you can use a phantom type, e.g. type 'a id = {id: int} (*Type argument used only to differentiate between various kinds of ids*) type user (*This type has no inhabitant, don't worry, it's only for coercions*) type movie (*same here*) let a = {id:57} : user id and b = {id:80}: movie id in if a = b then ... It's an elegant technique, which I personally like, but which can sometimes cause puzzling error messages if you forget coercions. I hope this helps, Regards, David On Feb 12, 2010, at 7:32 AM, Grégoire Seux wrote: > hello ! > > i would like to create two types and use the type checker to verify the "meaning" of my programs: > > type user_id = int > type movie_id = int > > i'd like if the type checker would warn me if i write something that is non-sense: > let a:user_id = 57 and b:movie_id = 80 in > if a=b then ... > > because this is obvioulsy a mistake > > do you know if is this possible ? > thanks by advance ! > > > -- > Grégoire > _______________________________________________ > Caml-list mailing list. Subscription management: > http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list > Archives: http://caml.inria.fr > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs