[
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: | -- (:) |
| From: | Vincent Poirriez <Vincent.Poirriez@u...> |
| Subject: | [Caml-list] Re: modules and objects |
OK , I was tired,forgive the question. the answer is obvious if for example I remember that types are not first class values and that a module may (and often) contains types. Vincent Le Thu, 28 Nov 2002 19:14:40 +0100 Vincent Poirriez <Vincent.Poirriez@univ-valenciennes.fr > vous avez écrit: |Hello list, | |My non-important question is "why a module is not a first class |value? while objects are." | I was playing with modules and objects, and I found funny that it's |possible to simulate the constructor new, just by using a functor |taking an empty module. | |module Void = struct end |module type Unit = sig end | |module Build(M:Unit) = struct | let r = ref 0 | let get () = !r | let put i = r :=i |end | |module type CONS = sig val get: unit -> int end |module type PROD = sig val put: int -> unit end | |module Foo = Build(Void) |module Bar = Build(Void) |module FooC= (Foo:CONS) |module FooP= (Foo:PROD) | |What remains impossible is: | let lm = [FooP;FooC] impossible | |While with objects: |class build = object |val mutable r = 0 |method get = r |method put i = r <- i |end | |let foo = new build |let bar = new build | |class virtual cons = object | method virtual get : int |end |class virtual prod = object | method virtual put : int -> unit |end |let fooc = (foo :> cons) |let foop = (foo :> prod) | | let lo = [foo;bar] | |Is correct. | |Vincent | | | |-- |courriel: vincent.poirriez@univ-valenciennes.fr |tel: (33)[0]3 27 51 19 53 |Université de Valenciennes et du Hainaut-Cambrésis - Le Mont Houy |F-59313 Valenciennes cedex 9 - FRANCE |http://www.univ-valenciennes.fr/LAMIH/ROI/poirriez -- courriel: vincent.poirriez@univ-valenciennes.fr tel: (33)[0]3 27 51 19 53 Université de Valenciennes et du Hainaut-Cambrésis - Le Mont Houy F-59313 Valenciennes cedex 9 - FRANCE http://www.univ-valenciennes.fr/LAMIH/ROI/poirriez ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners