caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] exhaustiveness checking within a submatch
@ 2013-10-10  8:00 Martin DeMello
  2013-10-10  8:07 ` David Allsopp
  0 siblings, 1 reply; 4+ messages in thread
From: Martin DeMello @ 2013-10-10  8:00 UTC (permalink / raw)
  To: OCaml List

Just curious as to why the compiler can't handle this, since in theory
everything is statically deducible:

# type test = A | B | C | D;;
type test = A | B | C | D

# let f = A;;
val f : test = A

# match f with A -> 1 | B -> 2 | C | D -> ( match f with C -> 3 | D -> 4);;
Characters 40-71:
                                                               Warning
8: this pattern-matching is not exhaustive.
                                                       Here is an
example of a value that is not matched:
(A|B)
Characters 40-71:
Warning 8: this pattern-matching is not exhaustive.
Here is an example of a value that is not matched:
(A|B)
- : int = 1

martin

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

* RE: [Caml-list] exhaustiveness checking within a submatch
  2013-10-10  8:00 [Caml-list] exhaustiveness checking within a submatch Martin DeMello
@ 2013-10-10  8:07 ` David Allsopp
  2013-10-10  8:09   ` David House
  0 siblings, 1 reply; 4+ messages in thread
From: David Allsopp @ 2013-10-10  8:07 UTC (permalink / raw)
  To: OCaml List

Martin DeMello wrote:
> Just curious as to why the compiler can't handle this, since in theory
> everything is statically deducible:
> 
> # type test = A | B | C | D;;
> type test = A | B | C | D
> 
> # let f = A;;
> val f : test = A
> 
> # match f with A -> 1 | B -> 2 | C | D -> ( match f with C -> 3 | D ->
> 4);;
> Characters 40-71:
>                                                                Warning
> 8: this pattern-matching is not exhaustive.
>                                                        Here is an
> example of a value that is not matched:
> (A|B)
> Characters 40-71:
> Warning 8: this pattern-matching is not exhaustive.
> Here is an example of a value that is not matched:
> (A|B)
> - : int = 1

http://caml.inria.fr/pub/ml-archives/caml-list/2007/02/d35648b13d76f1717edbf41101dc913f.en.html


David

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

* Re: [Caml-list] exhaustiveness checking within a submatch
  2013-10-10  8:07 ` David Allsopp
@ 2013-10-10  8:09   ` David House
  2013-10-10 17:32     ` Martin DeMello
  0 siblings, 1 reply; 4+ messages in thread
From: David House @ 2013-10-10  8:09 UTC (permalink / raw)
  To: David Allsopp; +Cc: OCaml List

This does actually work with polymorphic variants, as long as you
rename the thing in the submatch:

match f with `A -> 1 | `B -> 2 | (`C | `D as foo) -> match foo with `C
-> 3 | `D -> 4

On 10 October 2013 09:07, David Allsopp <dra-news@metastack.com> wrote:
> Martin DeMello wrote:
>> Just curious as to why the compiler can't handle this, since in theory
>> everything is statically deducible:
>>
>> # type test = A | B | C | D;;
>> type test = A | B | C | D
>>
>> # let f = A;;
>> val f : test = A
>>
>> # match f with A -> 1 | B -> 2 | C | D -> ( match f with C -> 3 | D ->
>> 4);;
>> Characters 40-71:
>>                                                                Warning
>> 8: this pattern-matching is not exhaustive.
>>                                                        Here is an
>> example of a value that is not matched:
>> (A|B)
>> Characters 40-71:
>> Warning 8: this pattern-matching is not exhaustive.
>> Here is an example of a value that is not matched:
>> (A|B)
>> - : int = 1
>
> http://caml.inria.fr/pub/ml-archives/caml-list/2007/02/d35648b13d76f1717edbf41101dc913f.en.html
>
>
> David
>
> --
> Caml-list mailing list.  Subscription management and archives:
> https://sympa.inria.fr/sympa/arc/caml-list
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs

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

* Re: [Caml-list] exhaustiveness checking within a submatch
  2013-10-10  8:09   ` David House
@ 2013-10-10 17:32     ` Martin DeMello
  0 siblings, 0 replies; 4+ messages in thread
From: Martin DeMello @ 2013-10-10 17:32 UTC (permalink / raw)
  To: David House; +Cc: David Allsopp, OCaml List

Thanks. So I guess the answer boils down to "possible but not worth
it", which makes sense.

martin

On Thu, Oct 10, 2013 at 1:09 AM, David House <dhouse@janestreet.com> wrote:
> This does actually work with polymorphic variants, as long as you
> rename the thing in the submatch:
>
> match f with `A -> 1 | `B -> 2 | (`C | `D as foo) -> match foo with `C
> -> 3 | `D -> 4
>
> On 10 October 2013 09:07, David Allsopp <dra-news@metastack.com> wrote:
>> Martin DeMello wrote:
>>> Just curious as to why the compiler can't handle this, since in theory
>>> everything is statically deducible:
>>>
>>> # type test = A | B | C | D;;
>>> type test = A | B | C | D
>>>
>>> # let f = A;;
>>> val f : test = A
>>>
>>> # match f with A -> 1 | B -> 2 | C | D -> ( match f with C -> 3 | D ->
>>> 4);;
>>> Characters 40-71:
>>>                                                                Warning
>>> 8: this pattern-matching is not exhaustive.
>>>                                                        Here is an
>>> example of a value that is not matched:
>>> (A|B)
>>> Characters 40-71:
>>> Warning 8: this pattern-matching is not exhaustive.
>>> Here is an example of a value that is not matched:
>>> (A|B)
>>> - : int = 1
>>
>> http://caml.inria.fr/pub/ml-archives/caml-list/2007/02/d35648b13d76f1717edbf41101dc913f.en.html
>>
>>
>> David
>>
>> --
>> Caml-list mailing list.  Subscription management and archives:
>> https://sympa.inria.fr/sympa/arc/caml-list
>> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
>> Bug reports: http://caml.inria.fr/bin/caml-bugs
>
> --
> Caml-list mailing list.  Subscription management and archives:
> https://sympa.inria.fr/sympa/arc/caml-list
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs

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

end of thread, other threads:[~2013-10-10 17:32 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-10-10  8:00 [Caml-list] exhaustiveness checking within a submatch Martin DeMello
2013-10-10  8:07 ` David Allsopp
2013-10-10  8:09   ` David House
2013-10-10 17:32     ` Martin DeMello

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