data A = A data B = B data C = C data D = D data Sopt > A,B,C data Topt > B,C,D f x | x=='a' = B | otherwise = C f y = D c = case True of False -> if True then B else C True -> A