_#[y]=y x#(y:z)=y++x++x#z x&y=","#map(:x)y main=putStr$"\n\n"#[["instance (",", "#["Monoid "++[c]|c<-s],") => Monoid (",""&s,") where\n mempty = (",init$s>>"mempty,",")\n (","1"&s,") `mappend` (","2"&s,") = (",","#[c:"1 `mappend` "++c:"2"|c<-s],")"]>>=id|s<-[['a'..c]|c<-['b'..'z']]]

Note that non-ascii characters in the above source code will be escaped (such as \x9f).