From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id KAA26652; Wed, 10 Sep 2003 10:12:21 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id KAA00988 for ; Wed, 10 Sep 2003 10:12:20 +0200 (MET DST) Received: from sark.cc.gatech.edu (sark.cc.gatech.edu [130.207.7.23]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id h8A8CIf08808 for ; Wed, 10 Sep 2003 10:12:19 +0200 (MET DST) Received: from gaia.cc.gatech.edu (gaia.cc.gatech.edu [130.207.3.8]) by sark.cc.gatech.edu (8.12.9/8.12.8) with ESMTP id h8A8CEDf004355; Wed, 10 Sep 2003 04:12:17 -0400 (EDT) Received: (from fernando@localhost) by gaia.cc.gatech.edu (8.12.9/8.12.8) id h8A8CEIq008841; Wed, 10 Sep 2003 04:12:14 -0400 (EDT) Date: Wed, 10 Sep 2003 04:12:14 -0400 From: Fernando Alegre To: "Beck01, Wolfgang" Cc: caml-list@inria.fr Subject: Re: [Caml-list] strange behaviour with variants and "cannot be g eneralized" Message-ID: <20030910081214.GA8001@gaia.cc.gatech.edu> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.1i X-Loop: caml-list@inria.fr X-Spam: no; 0.00; alegre:01 gatech:01 caml-list:01 backquote:01 3.06.:01 uglier:01 compiles:01 passing:01 closures:01 functors:01 functors:01 functor:01 shorten:01 functorize:01 abstraction:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk 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