data-transform 0.1.0.1 → 0.1.0.2
raw patch · 2 files changed
+16/−8 lines, 2 filesdep ~base
Dependency ranges changed: base
Files
- data-transform.cabal +2/−2
- src/Data/Transform/Internal.hs +14/−6
data-transform.cabal view
@@ -1,5 +1,5 @@ name: data-transform-version: 0.1.0.1+version: 0.1.0.2 synopsis: Functions to transform data structures. description: This library provides a simple way to transform parts of complex data structures. It is based on Data.Data.@@ -22,7 +22,7 @@ MultiParamTypeClasses, FunctionalDependencies, UndecidableInstances- build-depends: base >= 4 && < 5,+ build-depends: base >= 4.9 && < 5, mtl, containers hs-source-dirs: src
src/Data/Transform/Internal.hs view
@@ -50,6 +50,8 @@ import Data.Data import Data.Monoid +import qualified Data.Semigroup as S+ import Control.Monad import Control.Monad.Writer import Control.Monad.State@@ -86,10 +88,13 @@ mkItemM :: (Monad m, Data a) => (a -> m a) -> EndoMItem m mkItemM = EndoMItem +instance S.Semigroup EndoList where+ Nil <> b = b+ (Cons x l) <> b = Cons x (l S.<> b)+ instance Monoid EndoList where- mempty = Nil- mappend Nil b = b- mappend (Cons x l) b = Cons x (mappend l b)+ mempty = Nil+ mappend = (S.<>) instance IsList EndoList where type Item EndoList = EndoItem@@ -98,10 +103,13 @@ Nil -> Nothing Cons f l -> Just (EndoItem f, l) +instance S.Semigroup (EndoListM m) where+ NilM <> b = b+ (ConsM x l) <> b = ConsM x (l S.<> b)+ instance Monoid (EndoListM m) where- mempty = NilM- mappend NilM b = b- mappend (ConsM x l) b = ConsM x (mappend l b)+ mempty = NilM+ mappend = (S.<>) instance Monad m => IsList (EndoListM m) where type Item (EndoListM m) = EndoMItem m