Fumiaka Kinoshita's instance actually seems both sound and "slightly more defined". It even relates more obviously to the proposed Alternative, which can be seen as exploiting the fact that the First semigroup can be applied on any data type and then using this instance. m <|> n = fmap getFirst (fmap First m <> fmap First n) -Edward On Sat, Jul 25, 2015 at 11:43 PM, M Farkas-Dyck <strake888@gmail.com> wrote:
On 26/07/2015 at 12:23:13 +0900, Fumiaki Kinoshita wrote:
There is another possible instance:
instance Semigroup a => Monoid (ZipList a) where mempty = ZipList [] mappend (ZipList xs0) (ZipList ys0) = ZipList (mappend xs0 ys0) where go (x:xs) (y:ys) = x <> y : go xs ys go xs [] = xs go [] ys = ys
This breaks the identity law. _______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries