data A = True' | False' deriving Show foo :: A -> Integer foo True' = 1 foo False' = 0 data P3 = P Bool A -- P (Bool x A) data BigP = P1 Bool A | P2 Integer deriving Show bar :: BigP -> Integer bar (P1 _ _) = 1 bar (P2 _) = 2 int_plus_3 :: Integer -> Integer int_plus_3 n = n + 3 -- examples comp :: BigP -> Integer comp = int_plus_3 . bar main :: IO () main = putStrLn "Hello world"