data Prod a b = Par a b deriving Show pi_a :: Prod a b -> a pi_a (Par x y) = x pi_b :: Prod a b -> b pi_b (Par x y) = y instance (Eq a, Eq b) => Eq (Prod a b) where (Par x y) == (Par z w) = (x == z) && (y == w) data Prod' a b = Par' { pi'_a :: a, pi'_b :: b } deriving (Show, Eq) x' = Par' {pi'_a = 1, pi'_b = 2}