<div dir="ltr">This might be better answered at the haskell-cafe. Sending to cafe.</div><div class="gmail_extra"><br><div class="gmail_quote">On 21 March 2015 at 03:09, Stuart Hungerford <span dir="ltr"><<a href="mailto:stuart.hungerford@gmail.com" target="_blank">stuart.hungerford@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
As a learning exercise I'm modelling some algebraic structures as<br>
Haskell typeclasses. Some of these are multi-parameter type classes.<br>
Here's a very simplified version of the type class relationships:<br>
<br>
class MM a where<br>
  one :: a<br>
<br>
class AM a where<br>
  zero :: a<br>
<br>
class (AM a, MM a) => SR a<br>
<br>
class (AM a) => AG a where<br>
  inv :: a -> a<br>
<br>
class (SR a) => R a where<br>
  neg :: a -> a<br>
<br>
class (R r, AG g) => M r g where<br>
  sca :: r -> g -> g<br>
<br>
check :: (Eq g, M r g) => g -> Bool<br>
check x = sca one x == x<br>
<br>
The problem I have is that GHC is finding the "r" type variable in the<br>
"check" function ambiguous. Given my still limited Haskell knowledge<br>
I'm not surprised this is happening. What I would like to know is how<br>
experienced Haskellers handle this situation in practice: is there an<br>
idiomatic way of disambiguating "r" or is it a sign of poor type class<br>
design?<br>
<br>
Thanks,<br>
<br>
Stu<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div>Regards</div><div dir="ltr"><div><br></div><div>Sumit Sahrawat</div></div></div></div></div></div></div>
</div>