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 JAA25220; Wed, 19 Feb 2003 09:09:33 +0100 (MET) 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 JAA25234 for ; Wed, 19 Feb 2003 09:09:32 +0100 (MET) X-SPAM-Warning: Sending machine is listed in blackholes.five-ten-sg.com Received: from athlon.baretta.com (host241-4.pool62211.interbusiness.it [62.211.4.241] (may be forged)) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id h1J89VT27928 for ; Wed, 19 Feb 2003 09:09:32 +0100 (MET) Received: from baretta.com (localhost.localdomain [127.0.0.1]) by athlon.baretta.com (Postfix) with ESMTP id 7E6C1273AA for ; Wed, 19 Feb 2003 09:13:33 +0100 (CET) Message-ID: <3E533CAD.8080400@baretta.com> Date: Wed, 19 Feb 2003 09:13:33 +0100 From: Alessandro Baretta Organization: Baretta srl -- www.baretta.com User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020826 X-Accept-Language: it, en MIME-Version: 1.0 To: Ocaml Subject: [Caml-list] Baffling typing problem Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk I have a typing problem concerning polymorphic variants I can't figure out myself. The code is long and boring, so, if I can avoid it, I will not post it. I'll try to condense it to a more easily comprehensible form. let make_data = function | "whoa" -> `WHOA(`Foo, [ `Frob; `Twid; `Knob ]) | "whiz" -> `WHIZ(`Bar, [ `Twid; `Twid; `Frob; `Frob]) | "bang" -> `BANG(`Foo, [ ], [ ] ) and data = make_data "whoa" If I pass this to the toplevel I get no error message: Characters 16-169: Warning: this pattern-matching is not exhaustive. Here is an example of a value that is not matched: "" ................function | "whoa" -> `WHOA(`Foo, [ `Frob; `Twid; `Knob ]) | "whiz" -> `WHIZ(`Bar, [ `Twid; `Twid; `Frob; `Frob]) | "bang" -> `BANG(`Foo, [ ], [ ] ) val make_data : string -> [> `BANG of [> `Foo] * 'a list * 'b list | `WHIZ of [> `Bar] * [> `Frob | `Twid] list | `WHOA of [> `Foo] * [> `Frob | `Knob | `Twid] list] = val data : _[> `BANG of _[> `Foo] * '_a list * '_b list | `WHIZ of _[> `Bar] * _[> `Frob | `Twid] list | `WHOA of _[> `Foo] * _[> `Frob | `Knob | `Twid] list] = `WHOA (`Foo, [`Frob; `Twid; `Knob]) I attempt to compile it with ocamlc I get this error message: File "prova.ml", line 1, characters 16-169: Warning: this pattern-matching is not exhaustive. Here is an example of a value that is not matched: "" File "prova.ml", line 6, characters 11-27: The type of this expression, _[> `BANG of _[> `Foo] * '_a list * '_b list | `WHIZ of _[> `Bar] * _[> `Frob | `Twid] list | `WHOA of _[> `Foo] * _[> `Frob | `Knob | `Twid] list], contains type variables that cannot be generalized Is there any way around this limitation? Alex ------------------- 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