Sat Apr 20 12:26:27 EDT 2019
Why is this uninituitive?
this is clear:
Ring m t -> Ring m (C t)
why should this be different:
Seq m r -> Ring m (r t)
The former means, given that Ring operations are defined for t, here's
a way to define Ring operations for C t.
The latter means, given that there is an implementation for Seq,
here's a way to implement Ring.
There isn't anything wrong with this, but what is clear is that it
should not be the only instance maybe? Maybe r just needs to be made
This smells like a detail. Something not really that important.
EDIT: Yes it's a detail. It's probably possible to remove it using
some more "pinning" of type classes, but basically the problem is that
the compiler doesn't know that the C type is not used as a
representation. In practice it seems that m and t are never generic
when this class is instantiated so it is not an issue.
EDIT: Looks like this is going to happen a lot.