This might be better answered at the haskell-cafe. Sending to cafe.

On 21 March 2015 at 03:09, Stuart Hungerford <stuart.hungerford@gmail.com> wrote:
Hi,

As a learning exercise I'm modelling some algebraic structures as
Haskell typeclasses. Some of these are multi-parameter type classes.
Here's a very simplified version of the type class relationships:

class MM a where
  one :: a

class AM a where
  zero :: a

class (AM a, MM a) => SR a

class (AM a) => AG a where
  inv :: a -> a

class (SR a) => R a where
  neg :: a -> a

class (R r, AG g) => M r g where
  sca :: r -> g -> g

check :: (Eq g, M r g) => g -> Bool
check x = sca one x == x

The problem I have is that GHC is finding the "r" type variable in the
"check" function ambiguous. Given my still limited Haskell knowledge
I'm not surprised this is happening. What I would like to know is how
experienced Haskellers handle this situation in practice: is there an
idiomatic way of disambiguating "r" or is it a sign of poor type class
design?

Thanks,

Stu
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners



--
Regards

Sumit Sahrawat