On 12/20/2012 08:54 PM, Daniel Feltey wrote: > You were only missing the restriction that both types a and b must be > instances of Monoid in order to make Socket a b into an instance of Monoid. > > > > Dan Feltey
Thank you for your help. An additional question, if I might: For the sake of elegance and simplicity, I modified the class and instances to avoid the "tuple" aspect: code: -------- data Socket2 a b = Socket2 a b deriving (Show) instance (Monoid a, Monoid b) => Monoid (Socket2 a b) where mempty = Socket2 mempty mempty Socket2 a b `mappend` Socket2 w x = Socket2 (a `mappend` w) (b `mappend` x) -------- Of course, I thought it would be likely I would want other classes and instances with additional numbers of types: code: -------- data Socket3 a b c = Socket3 a b c deriving (Show) instance (Monoid a, Monoid b, Monoid c) => Monoid (Socket3 a b c) where mempty = Socket3 mempty mempty mempty Socket3 a b c `mappend` Socket3 w x y = Socket3 (a `mappend` w) (b `mappend` x) (c `mappend` y) data Socket4 a b c d = Socket4 a b c d deriving (Show) instance (Monoid a, Monoid b, Monoid c, Monoid d) => Monoid (Socket4 a b c d) where mempty = Socket4 mempty mempty mempty mempty Socket4 a b c d `mappend` Socket4 w x y z = Socket4 (a `mappend` w) (b `mappend` x) (c `mappend` y) (d `mappend` z) data Socket 5 a b c d e... et cetera -------- Seeing as the pattern here is so rigid and obvious, I was wondering: is it possible to abstract this even more? So I could, for instance, just specify that I want a Socket with 8 types, and poof, it would be there? Or is this as meta as we get? (I.e., without going to something like Template Haskell.) -- frigidcode.com
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe