G'day all.

Quoting Claus Reinke <[EMAIL PROTECTED]>:

> different =/= wrong !-)

[...]

> but that is not what you're saying there at all! you're saying that -within
> view 'view' of Typ- Typ is mapped to either Unit or Arrow, if the mapping
> is successfull. there can be other views of Typ, and the types do not
> guarantee that 'view' itself is exhaustive over Typ (there can be variants
> of Typ that 'view' fails to map to TypView).

data TypView = Unit | Arrow Typ Typ | Other

I still vote for "wrong". :-)

The problem, and we've been through this before, is that it's very
tempting to use types like Maybe because it's there, when it's better
replaced with a custom algebraic data type.

Even probably 90% of uses of Bool are better replaced with a two-element
enumerated type.  I see a lot of things like this:

    data Something = Something { ... leftHanded :: Bool ... }

Where this is safer, more expressive, more future-proof and more
meaningful:

    data Handedness = LeftHanded | RightHanded
    data Something = Something { ... handedness :: Handedness ... }

> even with concrete view types, you still have to consider the case that
> the mapping into that view type can be partial or non-exhaustive (if you
> add a constructor to Typ, but forget to update 'view', the type system
> will not complain, and matches over TypView will still be 'exhaustive'..).

There should be a compiler warning you can turn on in the implementation
of "view" which tells you if the pattern matching is exhaustive or not.

Cheers,
Andrew Bromage
_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to