From: Alessandro Baretta <alex@baretta.com>
To: Ocaml <caml-list@inria.fr>
Subject: Re: [Caml-list] What about polymorphic methods
Date: Sat, 08 Jun 2002 11:52:19 +0200 [thread overview]
Message-ID: <3D01D3D3.701@baretta.com> (raw)
In-Reply-To: <20020525125530P.garrigue@kurims.kyoto-u.ac.jp>
Jacques Garrigue wrote:
>
> Indeed, iterators are one of the major reasons to have polymorphic
> methods in ocaml (the other one being implicit subtyping of
> arguments). They are already in CVS, and will be present in ocaml
> 3.05.
>
> With the CVS version, you would have to write
>
> method left_iter : 'b. ('a -> 'b) -> 'b list = fun f -> ...
> method right_iter : 'b. ('a -> 'b) -> 'b list = fun f -> ...
Hello Jacques and Caml riders,
I am very excited about the possibilities offered by the
polymorphic methods of Ocaml 3.04+13, which I have recently
downloaded and built from the CVS site. Please, allow me one
more question on this matter.
I do not understand why I have to declare 'b explicitly as a
"polymorphic" type variable for the two iterators. If I omit
the explicit generalization of 'b in my bidirectional list
class, the compiler yields the following error message:
> Some type variables are unbound in this type:
> class ['a] bidi_list :
> 'a list ->
> object
> val first : 'a bidi
> val last : 'a bidi
> method head : 'a bidi
> method left_iter : ('a -> 'b) -> 'b list
> method right_iter : ('a -> 'c) -> 'c list
> method tail : 'a bidi
> end
> The method left_iter has type ('a -> 'b) -> 'b list where
> 'b is unbound
An analogous error message would be given for right_iter,
with reference to 'c, if the explicit generalization were
used for left_iter.
To me, this means that the type checker is able to correctly
determine the type of the class and of the polymorphic
methods. It simply refuses to generalize unbound type
variables without "written consent" from the programmer.
I think that coding a method whose type contains an unbound
type variable, implicitly means that the programmer desires
that type variable to be generalized. Since the compiler is
able to determine what type variables "ought" to be
generalized, why does it not perform and "implicit"
generalization, rather than requiring an "explicit"
generalization in the code?
I hope I am making some sense to somebody. Do excuse me if I
have used improper terminology, but I am not a professional
of functional languages and type theory.
Regards,
Alex Baretta
-------------------
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
next prev parent reply other threads:[~2002-06-08 9:46 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-05-25 3:45 [Caml-list] What about polymorphic methods? Alessandro Baretta
2002-05-25 3:55 ` Jacques Garrigue
2002-05-25 5:42 ` John Prevost
2002-05-27 19:10 ` Alessandro Baretta
2002-05-27 18:22 ` John Max Skaller
2002-05-30 0:02 ` Alessandro Baretta
2002-05-27 18:27 ` [Caml-list] Possible use for camlp4 John Max Skaller
2002-05-27 18:35 ` Alexander V. Voinov
2002-05-27 19:33 ` Daniel de Rauglaudre
2002-05-29 19:25 ` John Max Skaller
2002-05-30 2:42 ` Jacques Garrigue
2002-05-30 8:15 ` Daniel de Rauglaudre
2002-05-27 19:37 ` Daniel de Rauglaudre
2002-06-02 8:34 ` [Caml-list] What about polymorphic methods? Lauri Alanko
2002-06-03 23:57 ` Jacques Garrigue
2002-06-08 9:52 ` Alessandro Baretta [this message]
2002-06-10 10:13 ` [Caml-list] What about polymorphic methods Jacques Garrigue
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3D01D3D3.701@baretta.com \
--to=alex@baretta.com \
--cc=caml-list@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox