
2 Mar
2008
2 Mar
'08
4:30 p.m.
2008/3/2 Roman Cheplyaka
* Krzysztof Skrzętnicki
[2008-03-02 01:21:42+0100] Well, it is simply
coerce :: a -> b coerce _ = undefined
so coerce is simply empty function. But still, it is possible to write a function of type (a->b). Well, possibly I didn't write anything particularly new, but please excuse me for I'm still in sort of a shock after I've discovered it.
Also there's nice possibility of defining Maybe a without ADT. type Maybe a = (a, Bool) just x = (x, True) nothing = (undefined, False)
That's a hack. This is my favorite: type Maybe a = forall b. (a -> b) -> b -> b just x = \j n -> j x nothing = \j n -> n Luke