Template Haskell utility code to replicate instance declarations to cover large numbers of types. I'm doing that rather than using class contexts because most Distribution instances need to cover multiple classes (such as Enum, Integral and Fractional) and that can't be done easily because of overlap.
I experimented a bit with a convoluted type-level classification scheme, but I think this is simpler and easier to understand. It makes the haddock docs more cluttered because of the combinatorial explosion of instances, but overall I think it's just more sane than anything else I've come up with yet.
replicateInstances standin types decls will take the template-haskell
decls and substitute every instance of the
types, producing one copy of the
decls for every
Data.Random.Distribution.Uniform has the following bit of TH code:
$( replicateInstances ''Int integralTypes [d|
instance Distribution Uniform Int where rvar (Uniform a b) = integralUniform a b
instance CDF Uniform Int where cdf (Uniform a b) = integralUniformCDF a b
This code takes those 2 instance declarations and creates identical ones for
every type named in