21 Dec 2012 13:38
MPTC or functional dependencies?
Petr P <petr.mvd <at> gmail.com>
2012-12-21 12:38:21 GMT
2012-12-21 12:38:21 GMT
Dear Haskellers,
I'm working on a small library for representing semigroup (or monoid) actions on a set <http://hackage.haskell.org/package/semigroups-actions>.
The MultiParamTypeClasses extension seems to be best suited for the task, as a group can act on many sets, and a set can be acted on by different groups:
-- | Represents an action of semigroup <at> g <at> to set <at> a <at> .
--
-- Laws: <at> 'Endo' . 'act' <at> must be a homomorphism of semigroups.
class Semigroup g => SemigroupAct g a where
act :: g -> (a -> a)
But soon I realized that with MPTC the compiler has problems inferring types and I had to explicitly specify types when using `act` in many places. Because it seems that in most cases a set will have only a single group acting on it, I was thinking about using FDs:
class Semigroup g => SemigroupAct g a | a -> g where
But on the other hand, this can limit the generality of the type class. I cannot decide which one I should choose.
What would you suggest? According to your experience, would you choose plain MPTC or FD?
Best regards,
Petr Pudlak
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe <at> haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
RSS Feed