prelude-safeenum- A redefinition of the Prelude's Enum class in order to render it safe.

PortabilityHaskell98 + CPP + GeneralizedNewtypeDeriving
Safe HaskellTrustworthy



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.



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.


CalkinWilf (Ratio a) 

unCalkinWilf :: CalkinWilf a -> Ratio aSource

Return the underlying Ratio. Not using record syntax to define this in order to pretty up the derived Show instance.