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