papa-lens-implement 0.2.0 → 0.2.1
raw patch · 4 files changed
+103/−1 lines, 4 files
Files
- changelog +5/−0
- papa-lens-implement.cabal +2/−1
- src/Papa/Lens/Implement.hs +1/−0
- src/Papa/Lens/Implement/Data/Collapse.hs +95/−0
changelog view
@@ -1,3 +1,8 @@+0.2.1++* `collapse[N]` and `map[N]` functions.+* Generalised `catMaybes` and `mapMaybe`.+ 0.2.0 * Initial release.
papa-lens-implement.cabal view
@@ -1,5 +1,5 @@ name: papa-lens-implement-version: 0.2.0+version: 0.2.1 license: BSD3 license-file: LICENSE author: Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>@@ -40,6 +40,7 @@ exposed-modules: Papa.Lens.Implement+ Papa.Lens.Implement.Data.Collapse Papa.Lens.Implement.Data.List Papa.Lens.Implement.Data.Tuple
src/Papa/Lens/Implement.hs view
@@ -4,5 +4,6 @@ module P ) where +import Papa.Lens.Implement.Data.Collapse as P import Papa.Lens.Implement.Data.List as P import Papa.Lens.Implement.Data.Tuple as P
+ src/Papa/Lens/Implement/Data/Collapse.hs view
@@ -0,0 +1,95 @@+{-# LANGUAGE NoImplicitPrelude #-}++module Papa.Lens.Implement.Data.Collapse(+ collapse0+, collapse1+, collapse2+, map0+, map1+, map2+, mapMaybe+, catMaybes+) where++import Control.Category((.))+import Control.Lens(AsEmpty(_Empty), Cons, cons, Getting, folded, foldrOf, ( # ))+import Data.Monoid(Endo)+import Data.Foldable(Foldable(foldr))+import Data.Functor(Functor(fmap))++collapse0 ::+ (Cons r r a a, AsEmpty r) =>+ Getting (Endo r) s a+ -> s+ -> r+collapse0 x =+ foldrOf x cons (_Empty # ())++collapse1 ::+ (Cons r r a a, AsEmpty r) =>+ Getting (Endo r) (Compose f g b) a+ -> f (g b)+ -> r+collapse1 x =+ collapse0 x . Compose++collapse2 ::+ (Cons r r a a, AsEmpty r) =>+ Getting (Endo r) (Compose (Compose f g) h b) a+ -> f (g (h b))+ -> r+collapse2 x =+ collapse1 x . Compose++map0 ::+ (Cons r r a a, AsEmpty r, Functor f) =>+ Getting (Endo r) (f c) a+ -> (b -> c)+ -> f b+ -> r+map0 x f =+ collapse0 x . fmap f++map1 ::+ (Cons r r a a, AsEmpty r, Functor f) =>+ Getting (Endo r) (Compose f g c) a+ -> (b -> g c)+ -> f b+ -> r+map1 x f =+ collapse1 x . fmap f++map2 ::+ (Cons r r a a, AsEmpty r, Functor f) =>+ Getting (Endo r) (Compose (Compose f g) h c) a+ -> (b -> g (h c))+ -> f b+ -> r+map2 x f =+ collapse2 x . fmap f++----++mapMaybe ::+ (Cons r r c c, AsEmpty r, Foldable f, Functor f, Foldable g) =>+ (b -> g c)+ -> f b+ -> r+mapMaybe = + map1 folded++catMaybes ::+ (Cons r r b b, AsEmpty r, Foldable f, Foldable g) =>+ f (g b)+ -> r+catMaybes =+ collapse1 folded+ +-- not exported++newtype Compose f g a =+ Compose (f (g a))++instance (Foldable f, Foldable g) => Foldable (Compose f g) where+ foldr f z (Compose x) =+ foldr (\a b -> foldr f b a) z x