足し算と、引き算を再帰的に定義してみます。
最初に、単純に1を足す、1を引く関数を定義し、
その定義を再帰的に利用することで、引数を二つ取る足し算と引き算を定義します。
再帰的定義による足し算と引き算の再定義
add' :: Int -> Int
add' n = n + 1
sub' :: Int -> Int
sub' n = n - 1
plus :: Int -> Int -> Int
plus m n
| n == 0 = m
| otherwise = add' (plus m (sub' n))
minus :: Int -> Int -> Int
minus m n
| n == 0 = m
| otherwise = sub' (minus m (sub' n))