Re: [Haskell] Type-Level Naturals Like Prolog?

jawarren:
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
Perhaps these will be useful? http://www.haskell.org/haskellwiki/Peano_numbers http://www.haskell.org/haskellwiki/Type_arithmetic and a bit of stuff here http://www.haskell.org/haskellwiki/Smart_constructors Cheers, Don (P.S. moved to haskell-cafe@haskell.org, more appropriate)

Hello Donald, Thursday, July 13, 2006, 9:33:34 AM, you wrote:
Why can't Haskell (with extensions) do type-level Peano naturals in the same fashion? The code would be something like:
darcs get --partial --tag '0.1' http://www.eecs.tufts.edu/~rdocki01/typenats/ -- Best regards, Bulat mailto:Bulat.Ziganshin@gmail.com
participants (2)
-
Bulat Ziganshin
-
dons@cse.unsw.edu.au