úÎ!¬22      !"#$%&'()*+,-./01None &'08:DKSTDdiscreteA I type is a set X with at least one element, along with two functions,  :: X -> 2 X and  :: X -> 2 Xž, such that all inhabitants of the set X can be constructed given at least a single element of the set and these two functions. The following must hold:  3  3  =   3  3  = This means that 4, is a discrete type, because given any x :: 4!, one can construct any other 4 with the following functions:  x = if x 5 6 then 7 else 8 (x 9 1)  x = if x 5 : then 7 else 8 (x ; 1)$This also means that something like < is not9 a discrete type, because there are no such functions  and  that given any value of type <5 can allow the construction of all values of type <. acts as a replacement for . The motivation for R is two-fold: firstly, totality of all typeclass instances, and secondly, that G is a typeclass that does too many things, and does them poorly. If  or  are called on 6 or :#, respectively, the result will be 7.NoneDFSTdiscrete Similar to Discrete but  and  experience  'wrap-around' for = types. .  = >  .  = >  6 = :  : = 6?      !"#$%&'()*+,-./01234567897:;<=>7?@7A78B78C7DE7F7DG<=H7I78JK'discrete-0.1.0.0-7JlgvheFdu54YEreBQCzbq Data.Discrete Data.ModularGHC.EnumEnumDiscretesuccpred$fDiscreteWord64$fDiscreteWord32$fDiscreteWord16$fDiscreteWord8$fDiscreteWord$fDiscreteInt64$fDiscreteInt32$fDiscreteInt16$fDiscreteInt8 $fDiscreteInt$fDiscreteInteger$fDiscreteChar$fDiscreteOrdering$fDiscreteBool$fDiscreteEither $fDiscrete(,) $fDiscrete()$fDiscrete:~~: $fDiscrete:~:$fDiscreteRatio$fDiscreteMaybe$fDiscreteConst$fDiscreteIdentity $fDiscreteAltModularmsuccmpred$fModularWord64$fModularWord32$fModularWord16$fModularWord8 $fModularWord$fModularInt64$fModularInt32$fModularInt16 $fModularInt8 $fModularInt$fModularInteger$fModularOrdering $fModularBool$fModularEither $fModular(,) $fModular() $fModular:~~: $fModular:~:$fModularRatio$fModularMaybebaseGHC.BaseMaybe Control.Monad>=>ghc-prim GHC.TypesIntData.Type.Equality==maxBoundNothingJustGHC.Num+minBound-DoubleBoundedid