I think I would opt for the very literal

type Bla
    = A Int
    | B Int


type BlaConstructor
    = AConstructor
    | BConstructor


blaConstructor : Bla -> BlaConstructor
blaConstructor bla =
    case bla of
        A _ ->
            AConstructor

        B _ ->
            BConstructor


haveSameConstructor : Bla -> Bla -> Bool
haveSameConstructor firstBla secondBla =
    blaConstructor firstBla == blaConstructor secondBla

The compiler will remind you to add a new case to the blaConstructor function 
when you add a new Bla constructor, and that in turn will prompt you to add 
a case to the BlaConstructor type - no tricky tuple matching required. I'm 
also guessing you can come up with a more meaningful name than 
'constructor' (perhaps 'kind' or something) that better indicates what it 
actually means for an object to have a particular constructor.

On Monday, 17 July 2017 13:22:56 UTC-4, David Andrews wrote:
>
> Similar code, with new cases enforced by the compiler
>
> haveSameConstructor : Bla -> Bla -> Bool
> haveSameConstructor first second =
>     case (first, second) of
>         (A _, A _) -> True
>         (B _, B _) -> True
>         (A _, _) -> False
>         (B _, _) -> False
>
> On Jul 17, 2017 3:34 AM, "Birowsky" <[email protected] <javascript:>> 
> wrote:
>
>> That's not so bad. But the compiler wouldn't be able to nudge me to add a 
>> new comparison when I add a new constructor in the Bla union.
>>
>> Thanx anyways.
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Elm Discuss" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to