caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Fernando Alegre <fernando@cc.gatech.edu>
To: "Beck01, Wolfgang" <BeckW@t-systems.com>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] strange behaviour  with variants and "cannot be g eneralized"
Date: Wed, 10 Sep 2003 04:12:14 -0400	[thread overview]
Message-ID: <20030910081214.GA8001@gaia.cc.gatech.edu> (raw)
In-Reply-To: <ADD42C8394EBD4118A3D0003470C18F00950F3D8@G9JJT.mgb01.telekom.de>

On Wed, Sep 10, 2003 at 09:10:06AM +0200, Beck01, Wolfgang wrote:

>     "In programs, polymorphic variants work like usual ones. You just
>     have to prefix their names with a backquote character `."
> 
> and this is not true, at least in 3.06. After spending another evening
> with weird type errors, I replaced polymorphic variants with ordinary
> ones. My project looks uglier now since I had to split up some files,
> but at least it compiles and runs.

I think polymorphic variants are the trickiest part in OCaml, but once
you understand them, they do indeed work like the usual ones. I found
that when they do not work, it is because I was not defining the types
correctly. Only once I got a very weird behavior, where the compiler
accepted the types but the program failed to link due to unresolved
symbols in a polymorphic variant...

My own experience in one year programming exclusively in OCaml, but
being familiar to both C++ and Lisp before, is something like this:

- 0 months: use either Lisp style (passing functions as arguments
            like crazy, creating complex records of closures and
            do all loops with "let rec"...)
            or C++ style (huge classes with imperative methods,
            for/while loops and extensive use of ";")
            In any case: no inner modules, no functors, no variants
            and, of course, no mli's

- 3 months: realize that most "let rec" can be replaced by X.fold,
            and start adding some inner modules, mli's. Standardize
            data structures, so that all have fold, map, etc..

- 6 months: timidly start using functors, so that cut-and-paste code
            in similar modules is replaced by functor application
            Shorten classes to a few essential methods, and move
            most of the code to functions called from the methods.

- 9 months: Functorize everything! Abstraction, abstraction, abstraction..
            Reduce use of "Open" to the absolute minimum. Move types
            to their own files, and reduce the number of types to the
            few really necessary. Use classes only to simulate polymorphic
            lists, and to interact with lablGtk and lablGl.
            Still no polymorphic variants...

- 12 months: Polymorphic variants everywhere! They make passing data
             between modules so much cleaner...

Fernando

-------------------
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


  reply	other threads:[~2003-09-10  8:12 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-09-10  7:10 Beck01, Wolfgang
2003-09-10  8:12 ` Fernando Alegre [this message]
2003-09-10  8:18 ` Jacques Garrigue
2003-09-10 10:39   ` skaller
2003-09-10  9:48 ` skaller
2003-09-10 11:34   ` Frederic De Jaeger
  -- strict thread matches above, loose matches on Subject: below --
2003-09-09 14:13 Beck01, Wolfgang
2003-09-09 19:17 ` Didier Remy

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=20030910081214.GA8001@gaia.cc.gatech.edu \
    --to=fernando@cc.gatech.edu \
    --cc=BeckW@t-systems.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;
as well as URLs for NNTP newsgroup(s).