[Haskell-cafe] monoid pair of monoids?

Ilya Portnov portnov at iportnov.ru
Fri Dec 21 10:12:56 CET 2012


Hi.

Christopher Howard писал 21.12.2012 14:27:

>
> 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.)

Something like

data a ::: b = a ::: b

infixl 5 :::

instance (Monoid a, Monoid b) => Monoid (a ::: b) where ...

So, Monoid instance for, say, (a ::: b ::: c) == ((a ::: b) ::: c) will 
(should) be inferred automatically.

WBR, Ilya Portnov



More information about the Haskell-Cafe mailing list