| Portability | Haskell98 + CPP + GeneralizedNewtypeDeriving |
|---|---|
| Stability | provisional |
| Maintainer | wren@community.haskell.org |
| Safe Haskell | Trustworthy |
Data.Number.CalkinWilf
Description
Enumerate the rationals in Calkin--Wilf order. That is, when we
give enumeration a well-specified meaning (as Prelude.SafeEnum
does) this renders instances for Ratio problematic. Ratio
instances can be provided so long as the base type is integral
and enumerable; but they must be done in an obscure order that
does not coincide with the Ord instance for Ratio. Since
this is not what people may expect, we only provide an instance
for the newtype CalkinWilf, not for Ratio itself.
- Jeremy Gibbons, David Lester, and Richard Bird (2006). Enumerating the Rationals. JFP 16(3):281--291. DOI:10.1017/S0956796806005880 http://www.cs.ox.ac.uk/jeremy.gibbons/publications/rationals.pdf
- newtype CalkinWilf a = CalkinWilf (Ratio a)
- unCalkinWilf :: CalkinWilf a -> Ratio a
Documentation
newtype CalkinWilf a Source
Enumerate the rationals in Calkin--Wilf order. The enumeration is symmetric about zero, ensuring that all the negative rationals come before zero and all the positive rationals come after zero.
BUG: while the succeeds, precedes, toEnum, and fromEnum
methods are correct, they are horribly inefficient. This can be
rectified (or at least mitigated), but this remains to be done.
Constructors
| CalkinWilf (Ratio a) |
Instances
| Integral a => Enum (CalkinWilf a) | |
| Eq a => Eq (CalkinWilf a) | |
| Integral a => Fractional (CalkinWilf a) | |
| Integral a => Num (CalkinWilf a) | |
| Integral a => Ord (CalkinWilf a) | |
| (Integral a, Read a) => Read (CalkinWilf a) | |
| Integral a => Real (CalkinWilf a) | |
| Integral a => RealFrac (CalkinWilf a) | |
| (Integral a, Show a) => Show (CalkinWilf a) | |
| Integral a => Enum (CalkinWilf a) | |
| Integral a => DownwardEnum (CalkinWilf a) | |
| Integral a => UpwardEnum (CalkinWilf a) |
unCalkinWilf :: CalkinWilf a -> Ratio aSource