[Haskell-cafe] more generic class instances?

Christopher Howard christopher.howard at frigidcode.com
Sat Nov 2 18:25:11 UTC 2013


Thanks for the continued help. The only issue with your recently 
described approach is that, as near as I can tell, it requires the terms 
to be integral.

data Arbitrary a = Arbitrary (a -> a)

class PartialSum term where

   partialSum :: (Integral a) => a -> term a -> a

instance PartialSum Arbitrary where

   partialSum n (Arbitrary f) = sum $ map f [1..n]

I cannot, for example, do

h> partialSum 10 (Arbitrary (\x -> 1.5 * x :: Float))

<interactive>:88:1:

     No instance for (Integral Float)

       arising from a use of `partialSum'

     Possible fix: add an instance declaration for (Integral Float)

     In the expression:

       partialSum 10 (Arbitrary (\ x -> 1.5 * x :: Float))

     In an equation for `it':

         it = partialSum 10 (Arbitrary (\ x -> 1.5 * x :: Float))

h> partialSum 10 (Arbitrary (\ x -> (1 % 5) * x))

<interactive>:100:1:

     No instance for (Integral (Ratio a0))

       arising from a use of `partialSum'

     Possible fix: add an instance declaration for (Integral (Ratio a0))

     In the expression: partialSum 10 (Arbitrary (\ x -> (1 % 5) * x))

     In an equation for `it':

         it = partialSum 10 (Arbitrary (\ x -> (1 % 5) * x))



More information about the Haskell-Cafe mailing list