-- 自然数を定義
data NaturalNum = Zero | PlusOne NaturalNum deriving (Eq,Ord,Show,Read)
-- 加算を定義
Zero +^ n = n
m +^ Zero = m
m +^ n = inc m +^ dec n
-- 減算を定義
Zero -^ n = n
m -^ Zero = m
m -^ n | m == n = Zero
m -^ n = dec m -^ dec n
-- インクリメント(1+)を定義
inc n = PlusOne (n)
-- デクリメント(1-)を定義
dec (PlusOne (n)) = n
-- 自然数を独自自然数へ変換
int2NaturalNum 0 = Zero
int2NaturalNum n = PlusOne (int2NaturalNum (n-1))
-- 独自自然数を自然数へ変換
naturalNum2int Zero = 0
naturalNum2int n = 1 + naturalNum2int (dec n)