reader 0.0.4 → 0.0.5
raw patch · 7 files changed
+168/−67 lines, 7 files
Files
- changelog.md +5/−0
- reader.cabal +3/−2
- src/Data/Reader.hs +2/−1
- src/Data/Reader/Reader.hs +90/−0
- src/Data/Reader/Reader1.hs +24/−22
- src/Data/Reader/Reader2.hs +23/−21
- src/Data/Reader/Reader3.hs +21/−21
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 =