[Haskell-beginners] Pattern match(es) are overlapped ... but I do not see that they do

Michael Orlitzky michael at orlitzky.com
Mon Sep 2 00:22:56 CEST 2013


On 09/01/2013 04:32 PM, Brent Yorgey wrote:
>>
>> In a perfect world, these constants would be defined as part of an
>> enumeration type, correct? For example,
>>
>>   data WxId = WxIdCancel | WxIdNo | WxIdYes ... deriving (Enum)
>>
>> in which case the original attempt would have succeeded since it would
>> be matching on a constructor.
>>
>> However, unless there are constants defined for 0,1,... this approach
>> won't work automatically -- the derived Enum instance starts at zero and
>> increments by one. The library would have to define a custom Enum
>> instance and it would add a good bit of code.
> 
> In this case I wouldn't recommend making a custom Enum instance
> (because the Enum class makes all sorts of assumptions that would be
> hard to satisfy); I would just make a pair of functions
> 
>   wxIdToCode :: WxId -> Int
>   wxCodeToId :: Int -> Maybe WxId
> 

Oh, I wasn't suggesting that the OP do this. I was wondering aloud
whether or not there was a reason why wxHaskell doesn't define these
constants as a separate data type rather than a series of Ints (maybe
there's a good reason).





More information about the Beginners mailing list