
There is another possible instance. We can instead write:
instance Semigroup a => Semigroup (ZipList a) where
(<>) = liftA2 (<>)
instance Monoid a => Monoid (ZipList a) where
mempty = pure mempty
This behaves differently, and it is also law-abiding.
On Thu, May 3, 2018 at 5:22 AM, 박신환
As *instance Alternative ZipList* is defined since 4.11.0.0:
*instance Alternative http://hackage.haskell.org/package/base-4.11.1.0/docs/src/GHC.Base.html#Alte... ZipList http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Applicativ... where empty http://hackage.haskell.org/package/base-4.11.1.0/docs/src/GHC.Base.html#empt... = ZipList http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Applicativ... [] ZipList http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Applicativ... xs http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Applicativ... <|> http://hackage.haskell.org/package/base-4.11.1.0/docs/src/GHC.Base.html#%3C%... ZipList http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Applicativ... ys http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Applicativ... = ZipList http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Applicativ... (xs http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Applicativ... ++ http://hackage.haskell.org/package/base-4.11.1.0/docs/src/GHC.Base.html#%2B%... drop http://hackage.haskell.org/package/base-4.11.1.0/docs/src/GHC.List.html#drop (length http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Data.Foldable.html... xs http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Applicativ...) ys http://hackage.haskell.org/package/base-4.11.1.0/docs/src/Control.Applicativ...* *)* It seems perfectly fine to make *Monoid* for *ZipList* as followings:
*instance Semigroup a => Semigroup (ZipList a) where ZipList [] <> ZipList ys = ZipList ys ZipList xs <> ZipList [] = ZipList xs ZipList (x:xs) <> ZipList (y:ys) = ZipList (x <> y : ZipList xs <> ZipList ys)instance Semigroup a => Monoid (ZipList a) where mempty = ZipList []*
Note that this semantic is similar to that of *Maybe*.
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
-- -Andrew Thaddeus Martin