[Q] Four micro-questions on objects and modules.

From: Christian RINDERKNECHT (rinderkn@hugo.int-evry.fr)
Date: Tue Nov 02 1999 - 14:09:52 MET


Date: Tue, 2 Nov 1999 14:09:52 +0100
From: Christian RINDERKNECHT <rinderkn@hugo.int-evry.fr>
To: caml-list@inria.fr
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/pub/old_caml_site/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



This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:28 MET