data N = Z | S (n:: N) (+) (n,m:: N) :: N = case m of (Z )-> n (S n')-> {!!} {- (*) (n,m:: N) :: N = case m of { (Z) -> Z; (S m') -> n * m' + n;} test :: N = {!S (S Z) + S (S Z) !} -}