packages feed

reader 0.0.4 → 0.0.5

raw patch · 7 files changed

+168/−67 lines, 7 files

Files

changelog.md view
@@ -1,3 +1,8 @@+0.0.5++* Rename `downReader` to `liftReader`.+* Generalise top-level functions.+ 0.0.4  * Add `downReader` functions.
reader.cabal view
@@ -1,5 +1,5 @@ name:                 reader-version:              0.0.4+version:              0.0.5 synopsis:             A reader data type with all the bits description:          A reader data type with all the bits and type constructor rearrangements license:              BSD3@@ -21,10 +21,11 @@  library   exposed-modules:    Data.Reader-                      Data.Reader.Readers+                      Data.Reader.Reader                       Data.Reader.Reader1                       Data.Reader.Reader2                       Data.Reader.Reader3+                      Data.Reader.Readers    build-depends:        base >= 4.8 && < 6                       , contravariant >= 1 && < 2
src/Data/Reader.hs view
@@ -3,7 +3,8 @@  module Data.Reader( module R ) where -import Data.Reader.Readers as R+import Data.Reader.Reader as R import Data.Reader.Reader1 as R import Data.Reader.Reader2 as R import Data.Reader.Reader3 as R+import Data.Reader.Readers as R
+ src/Data/Reader/Reader.hs view
@@ -0,0 +1,90 @@+{-# OPTIONS_GHC -Wall #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}++module Data.Reader.Reader where++import Control.Applicative ( Applicative(pure) )+import Control.Arrow+    ( Kleisli(Kleisli) )+import Control.Category ( Category(..) )+import Control.Lens+    ( _Wrapped,+      over,+      review,+      iso,+      view,+      Iso,+      Rewrapped,+      Wrapped(Unwrapped) )+import Data.Profunctor ( Star(Star) )++-- |+--+-- Iso (Reader a b) (Reader a' b') (a -> b) (a' -> b')+reader ::+  (Rewrapped t t, Rewrapped s1 s1, Rewrapped s2 s2, Rewrapped c c, Unwrapped t ~ (a1 -> c), Unwrapped s1 ~ (a2 -> s2)) =>+  Iso s1 t (a2 -> Unwrapped s2) (a1 -> Unwrapped c)+reader =+  iso+    (\r -> view _Wrapped . view _Wrapped r)+    (\f -> review _Wrapped (review _Wrapped . f))++-- |+--+-- Iso (LensLike f s t a b) (LensLike f' s' t' a' b') (Reader1Lens f s t a b) (Reader1Lens f' s' t' a' b')+readerLens ::+  (Rewrapped t1 t1, Rewrapped s1 s1, Rewrapped s2 s2, Rewrapped t2 t2) =>+  Iso+    (Unwrapped s1 -> Unwrapped t1)+    (Unwrapped t2 -> Unwrapped s2)+    (s1 -> t1)+    (t2 -> s2)+readerLens =+  iso+    (\k f -> review _Wrapped (k (view _Wrapped f)))+    (\k f -> view _Wrapped (k (review _Wrapped f)))++-- |+--+-- Applicative f => Reader a b -> ReaderT a f b+pureReader ::+  (Applicative f, Rewrapped s1 t, Rewrapped t s1, Rewrapped s2 s2, Unwrapped t ~ (a -> f (Unwrapped s2)), Unwrapped s1 ~ (a -> s2)) =>+  s1+  -> t+pureReader =+  over _Wrapped (\f -> pure . view _Wrapped . f)++-- |+--+-- (forall x. f x -> g x) -> ReaderT a f b -> ReaderT a g b+homReader ::+  (Rewrapped s t, Rewrapped t s, Category cat, Unwrapped t ~ cat a c, Unwrapped s ~ cat a b) =>+  cat b c+  -> s+  -> t+homReader f =+  over _Wrapped (f .)++-- |+--+-- Iso (Star f a b) (Star f' a' b') (ReaderT a f b) (ReaderT a' f' b')+star ::+  (Rewrapped a a, Rewrapped s s, Unwrapped a ~ (d1 -> f2 c1), Unwrapped s ~ (d2 -> f3 c2)) =>+  Iso (Star f2 d1 c1) (Star f3 d2 c2) a s+star =+  iso+    (\(Star k) -> review _Wrapped k)+    (Star . view _Wrapped)++-- |+--+-- Iso (Kleisli f a b) (Kleisli f' a' b') (ReaderT a f b) (ReaderT a' f' b')+kleisli ::+  (Rewrapped a1 a1, Rewrapped s s, Unwrapped a1 ~ (a2 -> m1 b1), Unwrapped s ~ (a3 -> m2 b2)) =>+  Iso (Kleisli m1 a2 b1) (Kleisli m2 a3 b2) a1 s+kleisli =+  iso+    (\(Kleisli k) -> review _Wrapped k)+    (Kleisli . view _Wrapped)
src/Data/Reader/Reader1.hs view
@@ -15,28 +15,29 @@ , reader1' , star1 , kleisli1-, downReader1+, liftReader1+, pureReader1 , homReader1 ) where  import Control.Applicative     ( Applicative((<*>), pure), Alternative((<|>), empty) )-import Control.Arrow-    ( Kleisli(Kleisli) )+import Control.Arrow ( Kleisli ) import Control.Category ( Category(..) ) import Control.Lens     ( LensLike, view, iso, review, over, _Wrapped, Iso, Rewrapped, Wrapped(..) ) import Control.Monad     ( Monad(return, (>>=)), MonadPlus(..) )+import qualified Control.Monad.Reader as Reader(ReaderT(ReaderT))+import Control.Monad.Reader.Class ( MonadReader )+import qualified Control.Monad.Reader.Class as Reader ( MonadReader(..) ) import Control.Monad.State.Class ( MonadState(..) )-import Control.Monad.Reader.Class ( MonadReader(..) ) import Control.Monad.Writer.Class ( MonadWriter(..) ) import Control.Monad.Error.Class ( MonadError(..) ) import Control.Monad.Cont.Class ( MonadCont(..) ) import Control.Monad.IO.Class ( MonadIO(..) ) import Control.Monad.Morph     ( MFunctor(..), MMonad(..) )-import qualified Control.Monad.Reader as Reader(ReaderT(ReaderT)) import Control.Monad.Trans.Class ( MonadTrans(..) ) import Data.Functor ( Functor(fmap) ) import Data.Functor.Alt ( Alt((<!>)) )@@ -48,7 +49,9 @@ import Data.Functor.Identity ( Identity(..) ) import Data.Functor.Plus ( Plus(..) ) import Data.Monoid(Monoid(mempty))-import Data.Profunctor ( Star(Star) )+import Data.Profunctor ( Star )+import Data.Reader.Reader+    ( pureReader, homReader, reader, readerLens, star, kleisli ) import Data.Semigroup ( Semigroup((<>)) )  newtype Reader1T a f b =@@ -73,9 +76,7 @@     (a -> b)     (a' -> b') reader1 =-  iso-    (\r -> runIdentity . view _Wrapped r)-    (\f -> review _Wrapped (Identity . f))+  reader  type Reader1Lens f s t a b =   Reader1T a f b@@ -88,9 +89,7 @@     (Reader1Lens f s t a b)     (Reader1Lens f' s' t' a' b') reader1Lens =-  iso-    (\k f -> Reader1T (k (view _Wrapped f)))-    (\k f -> view _Wrapped (k (Reader1T f)))+  readerLens  reader1' ::   Iso@@ -110,9 +109,7 @@     (Reader1T a f b)     (Reader1T a' f' b') star1 =-  iso-    (\(Star k) -> Reader1T k)-    (\(Reader1T k) -> Star k)+  star  kleisli1 ::   Iso@@ -121,27 +118,32 @@     (Reader1T a f b)     (Reader1T a' f' b') kleisli1 =-  iso-    (\(Kleisli k) -> Reader1T k)-    (\(Reader1T k) -> Kleisli k)+  kleisli -downReader1 ::+liftReader1 ::   Iso     (Reader1T a f b)     (Reader1T a' f' b')     (Reader1 a (f b))     (Reader1 a' (f' b'))-downReader1 =+liftReader1 =   iso     (review reader1 . view _Wrapped)     (review _Wrapped . view reader1) +pureReader1 ::+  Applicative f =>+  Reader1 a b+  -> Reader1T a f b+pureReader1 =+  pureReader+ homReader1 ::   (forall x. f x -> g x)   -> Reader1T a f b   -> Reader1T a g b-homReader1 f =-  over _Wrapped (f .)+homReader1 =+  homReader  instance Functor f => Functor (Reader1T a f) where   fmap f (Reader1T g) =
src/Data/Reader/Reader2.hs view
@@ -16,7 +16,8 @@ , reader2' , star2 , kleisli2-, downReader2+, liftReader2+, pureReader2 , homReader2 ) where @@ -30,20 +31,21 @@       ArrowApply(..),       ArrowChoice(..),       ArrowLoop(..),-      Kleisli(Kleisli) )+      Kleisli ) import Control.Category ( Category(..) ) import Control.Lens     ( LensLike, view, iso, review, over, _Wrapped, Iso, Rewrapped, Wrapped(..) ) import Control.Monad     ( Monad(return, (>>=)), sequence, MonadPlus(..), (>=>) )+import qualified Control.Monad.Reader as Reader(ReaderT(ReaderT))+import Control.Monad.Reader.Class ( MonadReader )+import qualified Control.Monad.Reader.Class as Reader ( MonadReader(..) ) import Control.Monad.State.Class ( MonadState(..) )-import Control.Monad.Reader.Class ( MonadReader(..) ) import Control.Monad.Writer.Class ( MonadWriter(..) ) import Control.Monad.Error.Class ( MonadError(..) ) import Control.Monad.Fix ( MonadFix(..) ) import Control.Monad.Cont.Class ( MonadCont(..) ) import Control.Monad.IO.Class ( MonadIO(..) )-import qualified Control.Monad.Reader as Reader(ReaderT(ReaderT)) import Data.Distributive ( Distributive(distribute, collect) ) import Data.Either ( Either(Right, Left), either ) import Data.Functor ( Functor(fmap) )@@ -59,13 +61,14 @@ import Data.Profunctor     ( Choice(..),       Profunctor(dimap),-      Star(Star),+      Star,       Closed(..),       Costrong(unfirst),       Strong(..),       Mapping(..),       Cochoice(unright) ) import Data.Profunctor.Traversing ( Traversing(..) )+import Data.Reader.Reader import Data.Semigroup ( Semigroup((<>)) ) import Data.Semigroupoid ( Semigroupoid(..) ) import Data.Traversable ( Traversable(traverse) )@@ -93,9 +96,7 @@     (a -> b)     (a' -> b') reader2 =-  iso-    (\r -> runIdentity . view _Wrapped r)-    (\f -> review _Wrapped (Identity . f))+  reader  reader2' ::   Iso@@ -119,9 +120,7 @@     (Reader2Lens f s t a b)     (Reader2Lens f' s' t' a' b') reader2Lens =-  iso-    (\k f -> Reader2T (k (view _Wrapped f)))-    (\k f -> view _Wrapped (k (Reader2T f)))+  readerLens  star2 ::   Iso@@ -130,9 +129,7 @@     (Reader2T f a b)     (Reader2T f' a' b') star2 =-  iso-    (\(Star k) -> Reader2T k)-    (\(Reader2T k) -> Star k)+  star  kleisli2 ::   Iso@@ -141,27 +138,32 @@     (Reader2T f a b)     (Reader2T f' a' b') kleisli2 =-  iso-    (\(Kleisli k) -> Reader2T k)-    (\(Reader2T k) -> Kleisli k)+  kleisli -downReader2 ::+liftReader2 ::   Iso     (Reader2T f a b)     (Reader2T f' a' b')     (Reader2 a (f b))     (Reader2 a' (f' b'))-downReader2 =+liftReader2 =   iso     (review reader2 . view _Wrapped)     (review _Wrapped . view reader2) +pureReader2 ::+  Applicative f =>+  Reader2 a b+  -> Reader2T f a b+pureReader2 =+  pureReader+ homReader2 ::   (forall x. f x -> g x)   -> Reader2T f a b   -> Reader2T g a b-homReader2 f =-  over _Wrapped (f .)+homReader2 =+  homReader  instance Functor f => Functor (Reader2T f a) where   fmap f (Reader2T g) =
src/Data/Reader/Reader3.hs view
@@ -15,14 +15,14 @@ , reader3' , star3 , kleisli3-, downReader3+, liftReader3+, pureReader3 , homReader3 ) where  import Control.Applicative     ( Applicative(pure), liftA2 )-import Control.Arrow-    ( Kleisli(Kleisli) )+import Control.Arrow ( Kleisli ) import Control.Category ( Category(..) ) import Control.Lens     ( LensLike, view, iso, review, over, _Wrapped, Iso, Rewrapped, Wrapped(..) )@@ -33,9 +33,10 @@ import Data.Functor.Contravariant.Divisible     ( Decidable(..), Divisible(..) ) import Data.Functor.Identity ( Identity(..) )+import Data.Profunctor ( Star ) import Data.Monoid(Monoid(mempty, mappend))-import Data.Profunctor-    ( Star(Star) )+import Data.Reader.Reader+    ( pureReader, homReader, reader, readerLens, star, kleisli ) import Data.Semigroup ( Semigroup((<>)) ) import Data.Void ( absurd ) @@ -61,9 +62,7 @@     (a -> b)     (a' -> b') reader3 =-  iso-    (\r -> runIdentity . view _Wrapped r)-    (\f -> review _Wrapped (Identity . f))+  reader  reader3' ::   Iso@@ -87,9 +86,7 @@     (Reader3Lens f s t a b)     (Reader3Lens f' s' t' a' b') reader3Lens =-  iso-    (\k f -> Reader3T (k (view _Wrapped f)))-    (\k f -> view _Wrapped (k (Reader3T f)))+  readerLens  star3 ::   Iso@@ -98,9 +95,7 @@     (Reader3T f b a)     (Reader3T f' b' a') star3 =-  iso-    (\(Star k) -> Reader3T k)-    (\(Reader3T k) -> Star k)+  star  kleisli3 ::   Iso@@ -109,27 +104,32 @@     (Reader3T f b a)     (Reader3T f' b' a') kleisli3 =-  iso-    (\(Kleisli k) -> Reader3T k)-    (\(Reader3T k) -> Kleisli k)+  kleisli -downReader3 ::+liftReader3 ::   Iso     (Reader3T f b a)     (Reader3T f' b' a')     (Reader3 a (f b))     (Reader3 a' (f' b'))-downReader3 =+liftReader3 =   iso     (review reader3 . view _Wrapped)     (review _Wrapped . view reader3) +pureReader3 ::+  Applicative f =>+  Reader3 a b+  -> Reader3T f b a+pureReader3 =+  pureReader+ homReader3 ::   (forall x. f x -> g x)   -> Reader3T f b a   -> Reader3T g b a-homReader3 f =-  over _Wrapped (f .)+homReader3 =+  homReader  instance Contravariant (Reader3T f b) where   contramap f =