Hi,
I
was wondering what the best way to implement Natural number would be. Is there
a package which already does this?
Here
are some options:
1. Don’t bother. Just use
Integer.
2. Use the type
data
Natural = Zero | Succ !Natural
3. Use the following definition
taken from the Gentle Introduction to Haskell 98
newtype
Natural = MakeNatural Integer
toNatural ::Integer->
Integer
toNatural
x | x < 0 = error “Can’t create negative naturals!”
| otherwise = MakeNatural x
fromNatural
:: Natural -> Integer
fromNatural
(MakeNatural i) = i
and
then...
instance
Num Natural where
fromInteger = toNAtural
x + y = toNatural (fromNatural x +
fromNatural y)
x – y = etc..
x * y = etc...
Which method is best? So far, I’ve been picking option
#1 – just leaving things as they are and using Integer to keep things
simple.
I’ve got that feeling that [2] would be fast and [3]
would be slow. Comment appreciated on the merits of each.
Cheers,
Mark Spezzano