Looks a lot like Church encoding to me:

http://en.wikipedia.org/wiki/Church_encoding

It was first discovered by the guy who invented lambda calculus :p

- jeremy

On Nov 1, 2010, at 5:28 PM, Andrew Coppin wrote:

The other day, I accidentally came up with this:

{-# LANGUAGE RankNTypes #-}

type Either x y = forall r. (x -> r) -> (y -> r) -> r

left :: x -> Either x y
left x f g = f x

right :: y -> Either x y
right y f g = g y

This is one example; it seems that just about any algebraic type can be encoded this way. I presume that somebody else has thought of this before. Does it have a name?

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe