caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] Baffling typing problem
@ 2003-02-19  8:13 Alessandro Baretta
  2003-02-19  8:44 ` Jacques Garrigue
  0 siblings, 1 reply; 2+ messages in thread
From: Alessandro Baretta @ 2003-02-19  8:13 UTC (permalink / raw)
  To: Ocaml

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] =
   <fun>
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


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [Caml-list] Baffling typing problem
  2003-02-19  8:13 [Caml-list] Baffling typing problem Alessandro Baretta
@ 2003-02-19  8:44 ` Jacques Garrigue
  0 siblings, 0 replies; 2+ messages in thread
From: Jacques Garrigue @ 2003-02-19  8:44 UTC (permalink / raw)
  To: alex; +Cc: caml-list

From: Alessandro Baretta <alex@baretta.com>
[..]
> 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

This is not really related to polymorphic variants, only to the fact
they are polymorphic.
Due to the value-only restriction, you have an expression that cannot
be generalized. Since it contains some type variables, the compiler
cannot produce a .cmi from it.

> Is there any way around this limitation?

Write a .mli, or just explicitly put a type annotation on that
expression.

Seeing the shape of your type, it may be the case that the CVS version
of ocaml could generalize it (actually this is sound). This should
avoid some of such problems.

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


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2003-02-19  8:44 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-02-19  8:13 [Caml-list] Baffling typing problem Alessandro Baretta
2003-02-19  8:44 ` Jacques Garrigue

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