On 03/03/2008, at 8:30 AM, Luke Palmer wrote:
2008/3/2 Roman Cheplyaka <[EMAIL PROTECTED]>:
* Krzysztof Skrzętnicki <[EMAIL PROTECTED]> [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
For something slightly different, I've always enjoyed lists (or
integer indexed structures) as functions:
type List a = Integer -> Maybe a
You've got to watch out for non-contiguous lists. It's a good
challenge to write
head, tail, nil and cons for this type. Then write conversions to/
from normal
lists.
Bernie._______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe