[Haskell-cafe] coerce (safe!)

Luke Palmer lrpalmer at gmail.com
Sun Mar 2 16:30:22 EST 2008


2008/3/2 Roman Cheplyaka <roma at ro-che.info>:
> * Krzysztof Skrzętnicki <gtener at gmail.com> [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


More information about the Haskell-Cafe mailing list