packages feed

papa-lens-implement 0.2.0 → 0.2.1

raw patch · 4 files changed

+103/−1 lines, 4 files

Files

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