Browse thread
[Q] Four micro-questions on objects and modules.
- Christian RINDERKNECHT
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 1999-11-03 (20:54) |
From: | Christian RINDERKNECHT <rinderkn@h...> |
Subject: | [Q] Four micro-questions on objects and modules. |
Hello, I have a few questions on objects and modules. 1) Assume I compile m.ml made of: class c = object end and m.mli: class c : object end Now: Objective Caml version 2.02 # #load "m.cmo";; # let f = fun (x : #M.c) -> x;; val f : (#M.c as 'a) -> 'a = <fun> OK. What strikes me is: # let g = fun (x : M.c) -> x;; val g : M.c -> M.c = <fun> What is the difference between f and g? If the type of g is equivalent to #M.c -> #M.c, then according to the manual (#-types) there is a difference, isn'it? Moreover, I tought "M.c" was not syntactically correct when "c" is a class (hence the "#" symbol)... 2) What is the semantics of the syntactic productions (http://caml.inria.fr/ocaml/htmlman/node6.5.html): typexpr : typexpr # class-path | ( typexpr {, typexpr}) # class-path 3) Would it be possible to allow the "include" feature in class types? 4) With values one can equivalently write: # let (h : unit -> unit) = fun x -> x;; val h : unit -> unit = <fun> or # let h = ((fun x -> x) : unit -> unit);; val h : unit -> unit = <fun> I prefer the former when the function expression is big and I don't want my eyes to read it only in order to find the type annotation at the end. For the same sake, I think it would be consistent and useful to allow class types, module types to qualify directly the module names and the class names: # module (M : S) = struct (* lot of stuff here *) end;; ^ Not a Syntax error! and # class (x : ct) = object (* lot of stuff here *) end;; ^ Not a Syntax error! ...and the same for method and value instances. Best regards, -- Christian ----------------------------------------------------------------------- Christian Rinderknecht Phone +33 (0)1 60 76 44 43 Institut National des Télécommunications Fax +33 (0)1 60 76 47 11 Département Logiciels Réseaux (LOR) WWW 9, Rue Charles Fourier, F-91011 Évry Cedex