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