I'm definitely in favor of this idea. How (if at all) would you like these term-level natural numbers to relate to the type-level ones?

On Tue, Nov 11, 2014 at 4:35 AM, Herbert Valerio Riedel <hvr@gnu.org> wrote:
Hello CLC et al.,

I hereby suggest to add a type for encoding term-level naturals

  data Natural = <opaque/hidden>
       deriving (...the usual standard classes...)

to `base:Data.Word` module

Motivation
==========

 - GHC 7.10 is planned to ship with integer-gmp2[2] as its default
   `Integer` lib, whose low-level primitives are based on *unsigned*
   BigNums. And 'Natural' type for integer-gmp2 can be implemented
   directly w/o the overhead of wrapping an `Integer` via

     data Natural = NatS# Word# | NatJ# !PrimBigNat#

   as well as having a twice as large domain handled via the small-word
   constructor and thus avoiding FFI calls into GMP.

 - GHC/`base` already provides type-level naturals, but no term-level
   naturals

 - Remove the asymmetry of having an unbounded signed `Integer` but no
   unbounded /unsigned/ integral type.

   Also, `Data.Word` has been carrying the following note[1] for some
   time now:

   > It would be very natural to add a type Natural providing an
   > unbounded size unsigned integer, just as Integer provides unbounded
   > size signed integers. We do not do that yet since there is no
   > demand for it.



Discussion period: ~10 days (GHC 7.10 RC freeze is scheduled for Nov 21st)

Cheers,
  hvr

 [1]: http://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Word.html#g:3

 [2]: https://phabricator.haskell.org/D82
      https://ghc.haskell.org/trac/ghc/wiki/Design/IntegerGmp2
_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://www.haskell.org/mailman/listinfo/libraries