[
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: | Patrick M Doane <patrick@w...> |
| Subject: | Re: "Re: [Caml-list] A G'Caml question" + additional info |
On Mon, 25 Jun 2001, Jun Furuse wrote:
> Thus, the generic values are "open" to the others who include them,
> but it is not the open recursion you mentioned; print and print' are
> different values and independent each other.
>
> We do not want to introduce the full open recursion to generic
> values. You could add new type cases easily using the open recursion
> and it should be helpful in some cases. But it can also introduce
> heavy semantic confusion to our programs, since in the open recursion
> the semantics of generic values could not be fixed until all modules
> are linked together.
I agree that this could make programs more difficult to follow, but I
think it is to be expected with generic programming these days.
Also, isn't this kind of semantic confusion already present with using the
object oriented system?
In the following example, writing definitions like MyProgram.print may get
very tedious in practice.
module Int = struct
generic print = case int -> unit => print_int
end
module String = struct
generic print = case string -> unit => print_string
end
module List = struct
generic print =
case $a list -> unit => function [] -> () | x :: xs -> print x; print xs
end
module MyProgram = struct
generic print = case
| include Int.print
| include String.print
| include List.print
(* all other print functions to follow *)
end
Given what is done with Haskell type classes and C++ templates, it seems
more confusing to me to not support open recursion. Any thoughts?
Patrick
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr