This reminds me of an old thread started by, well me :)

http://www.haskell.org/pipermail/haskell-cafe/2010-March/074805.html (sorry for the typos)

It is not an especially enlightening thread, but contains some nice references.

HTH,

On 14 December 2010 20:09, Russ Abbott <russ.abbott@gmail.com> wrote:
Is there a way to get this to work?

data A = Aconstructor Int
data B = Bconstructor Int
data AorB = A | B

f :: Int -> AorB
f x 
  | even x     = Aconstructor x 
  | otherwise = Bconstructor x 

 I get this diagnostic.

Couldn't match expected type `AorB' against inferred type `A' 

Since AorB is A or B, why is this not permitted?

If instead I write 

data AorB = Aconstructor Int | Bconstructor Int 

everything works out ok. But what if I want separate types for A and B?

Thanks,

-- Russ 


--
Ozgur Akgun