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
No virus found in this outgoing message.
Checked by AVG.
Version: 7.5.557 / Virus Database: 270.11.12/1998 - Release Date: 12/03/2009
6:23 PM
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe