Haskell's type checking language is a logical programming language.
The canonical logical language is Prolog. However, Idealised Prolog
does not have data structures, and does Peano numbers like:

 natural(zero).
 natural(x), succ(x,y) :- natural(y)

And I believe (but cannot confirm):

 succ(zero,y).
 succ(x,y) :- succ(y,z)

Why can't Haskell (with extensions) do type-level Peano naturals in
the same fashion? The code would be something like:

data Zero

class Natural x where
        toInt :: x -> Integer
instance Natural Zero where
        toInt _ = 0
instance (Natural x, Succ x y) => Natural y where
        toInt y = undefined + 1

class Succ x y
instance Succ Zero y
instance Succ x y => Succ y z

zero = toInt (undefined :: Zero) -- THIS SUCCEEDS

one = toInt (undefined :: (Succ Zero x) => x) -- THIS FAILS

Thanks,
Jared Warren
_______________________________________________
Haskell mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to