module test import StdEnv :: Zero = Zero :: Succ a = Succ a :: Ar3 a b c :== (a -> b -> c) class succ a ~b :: a -> b instance succ Zero (Succ Zero) where succ Zero = Succ Zero instance succ a (Succ a) where succ a = Succ a class plus a b | succ a b :: a b instance plus Zero a a where plus a b = b instance plus (Succ a) b c | plus a (Succ b) c where plus (Succ a) b = plus a (Succ b) Start :: Int Start = 42 class fmap t :: (a -> b) (t a) -> t b instance fmap ((,)a) where fmap f (a, b) = (a, f b) Start = fmap inc (42, 37)