pointed 3.0.1 → 3.0.2
raw patch · 6 files changed
+257/−249 lines, 6 filesdep ~comonaddep ~comonad-transformersdep ~semigroupoids
Dependency ranges changed: comonad, comonad-transformers, semigroupoids, semigroups
Files
- .travis.yml +7/−0
- Data/Copointed.hs +0/−84
- Data/Pointed.hs +0/−160
- pointed.cabal +6/−5
- src/Data/Copointed.hs +84/−0
- src/Data/Pointed.hs +160/−0
.travis.yml view
@@ -1,1 +1,8 @@ language: haskell+notifications:+ irc:+ channels:+ - "irc.freenode.org#haskell-lens"+ skip_join: true+ template:+ - "\x0313pointed\x03/\x0306%{branch}\x03 \x0314%{commit}\x03 %{build_url} %{message}"
− Data/Copointed.hs
@@ -1,84 +0,0 @@-module Data.Copointed where--import Data.Default-import Data.Functor.Identity-import Data.Functor.Compose-import Data.Functor.Coproduct-import Data.Tree-import Data.Semigroup as Semigroup-import Control.Monad.Trans.Identity-import qualified Control.Monad.Trans.Writer.Lazy as Lazy-import qualified Control.Monad.Trans.Writer.Strict as Strict-import Control.Comonad.Trans.Env-import Control.Comonad.Trans.Store-import Control.Comonad.Trans.Traced-import Data.List.NonEmpty (NonEmpty(..))---- | 'Copointed' does not require a 'Functor', as the only relationship--- between 'copoint' and 'fmap' is given by a free theorem.--class Copointed p where- copoint :: p a -> a--instance Copointed Identity where- copoint = runIdentity--instance Default m => Copointed ((->)m) where- copoint f = f def--instance (Default m, Copointed w) => Copointed (TracedT m w) where- copoint (TracedT w) = copoint w def--instance Copointed ((,) a) where- copoint = snd--instance Copointed ((,,) a b) where- copoint (_,_,a) = a--instance Copointed ((,,,) a b c) where- copoint (_,_,_,a) = a--instance Copointed Tree where- copoint = rootLabel--instance (Copointed p, Copointed q) => Copointed (Compose p q) where- copoint = copoint . copoint . getCompose--instance (Copointed p, Copointed q) => Copointed (Coproduct p q) where- copoint = coproduct copoint copoint--instance Copointed m => Copointed (IdentityT m) where- copoint = copoint . runIdentityT--instance Copointed m => Copointed (Lazy.WriterT w m) where- copoint = fst . copoint . Lazy.runWriterT--instance Copointed m => Copointed (Strict.WriterT w m) where- copoint = fst . copoint . Strict.runWriterT--instance Copointed Dual where- copoint = getDual--instance Copointed Sum where- copoint = getSum--instance Copointed NonEmpty where- copoint ~(a :| _) = a--instance Copointed Semigroup.First where- copoint = Semigroup.getFirst--instance Copointed Semigroup.Last where- copoint = Semigroup.getLast--instance Copointed Semigroup.Max where- copoint = Semigroup.getMax--instance Copointed Semigroup.Min where- copoint = Semigroup.getMin--instance Copointed w => Copointed (EnvT e w) where- copoint = copoint . lowerEnvT--instance Copointed w => Copointed (StoreT s w) where- copoint (StoreT wf s) = copoint wf s
− Data/Pointed.hs
@@ -1,160 +0,0 @@-module Data.Pointed where--import Control.Arrow-import Control.Applicative-import Control.Concurrent.STM-import Data.Default-import qualified Data.Monoid as Monoid-import Data.Semigroup as Semigroup-import Data.Functor.Identity-import Data.Sequence (Seq)-import qualified Data.Sequence as Seq-import Data.Tree (Tree(..))-import Data.Set (Set)-import qualified Data.Set as Set-import Data.Functor.Constant-import qualified Data.Functor.Product as Functor-import Data.Functor.Compose-import Control.Monad.Trans.Cont-import Control.Monad.Trans.Error-import Control.Monad.Trans.List-import Control.Monad.Trans.Maybe-import Control.Monad.Trans.Identity-import Control.Monad.Trans.Reader-import Data.List.NonEmpty-import qualified Control.Monad.Trans.RWS.Lazy as Lazy-import qualified Control.Monad.Trans.RWS.Strict as Strict-import qualified Control.Monad.Trans.Writer.Lazy as Lazy-import qualified Control.Monad.Trans.Writer.Strict as Strict-import qualified Control.Monad.Trans.State.Lazy as Lazy-import qualified Control.Monad.Trans.State.Strict as Strict-import Data.Semigroupoid.Static--class Pointed p where- point :: a -> p a--instance Pointed [] where- point a = [a]--instance Pointed Maybe where- point = Just--instance Pointed (Either a) where- point = Right--instance Pointed IO where- point = return--instance Pointed STM where- point = return--instance Pointed Tree where- point a = Node a []--instance Pointed NonEmpty where- point a = a :| []--instance Pointed ZipList where- point = pure--instance Pointed Identity where- point = Identity--instance Pointed ((->)e) where- point = const--instance Default e => Pointed ((,)e) where- point = (,) def--instance Monad m => Pointed (WrappedMonad m) where- point = WrapMonad . return--instance Default m => Pointed (Const m) where- point _ = Const def--instance Arrow a => Pointed (WrappedArrow a b) where- point = pure--instance Pointed Dual where- point = Dual--instance Pointed Endo where- point = Endo . const--instance Pointed Sum where- point = Sum--instance Pointed Monoid.Product where- point = Monoid.Product--instance Pointed Monoid.First where- point = Monoid.First . Just--instance Pointed Monoid.Last where- point = Monoid.Last . Just--instance Pointed Semigroup.First where- point = Semigroup.First--instance Pointed Semigroup.Last where- point = Semigroup.Last--instance Pointed Semigroup.Max where- point = Semigroup.Max--instance Pointed Semigroup.Min where- point = Semigroup.Min--instance Pointed Seq where- point = Seq.singleton--instance Pointed Set where- point = Set.singleton--instance (Pointed p, Pointed q) => Pointed (Compose p q) where- point = Compose . point . point--instance (Pointed p, Pointed q) => Pointed (Functor.Product p q) where- point a = Functor.Pair (point a) (point a)--instance Default m => Pointed (Constant m) where- point _ = Constant def--instance Pointed (ContT r m) where- point a = ContT ($ a)--instance Pointed m => Pointed (ErrorT e m) where- point = ErrorT . point . Right--instance Pointed m => Pointed (IdentityT m) where- point = IdentityT . point--instance Pointed m => Pointed (ListT m) where- point = ListT . point . point--instance Pointed m => Pointed (MaybeT m) where- point = MaybeT . point . point--instance Pointed m => Pointed (ReaderT r m) where- point = ReaderT . const . point--instance (Default w, Pointed m) => Pointed (Lazy.RWST r w s m) where- point a = Lazy.RWST $ \_ s -> point (a, s, def)--instance (Default w, Pointed m) => Pointed (Strict.RWST r w s m) where- point a = Strict.RWST $ \_ s -> point (a, s, def)--instance (Default w, Pointed m) => Pointed (Lazy.WriterT w m) where- point a = Lazy.WriterT $ point (a, def)--instance (Default w, Pointed m) => Pointed (Strict.WriterT w m) where- point a = Strict.WriterT $ point (a, def)--instance Pointed m => Pointed (Lazy.StateT s m) where- point a = Lazy.StateT $ \s -> point (a, s)--instance Pointed m => Pointed (Strict.StateT s m) where- point a = Strict.StateT $ \s -> point (a, s)--instance Pointed m => Pointed (Static m a) where- point = Static . point . const
pointed.cabal view
@@ -1,6 +1,6 @@ name: pointed category: Data-version: 3.0.1+version: 3.0.2 license: BSD3 cabal-version: >= 1.6 license-file: LICENSE@@ -24,11 +24,11 @@ base >= 4 && < 5, transformers >= 0.2 && < 0.4, containers >= 0.4 && < 0.6,- comonad >= 3.0 && < 3.1,- comonad-transformers >= 3.0 && < 3.1,+ comonad >= 3,+ comonad-transformers >= 3, data-default >= 0.4 && < 0.6,- semigroups >= 0.8.3.1 && < 0.9,- semigroupoids >= 3.0 && < 3.1,+ semigroups >= 0.8.3.1,+ semigroupoids >= 3, stm >= 2.1.2.1 && < 2.5 exposed-modules:@@ -36,3 +36,4 @@ Data.Copointed ghc-options: -Wall+ hs-source-dirs: src
+ src/Data/Copointed.hs view
@@ -0,0 +1,84 @@+module Data.Copointed where++import Data.Default+import Data.Functor.Identity+import Data.Functor.Compose+import Data.Functor.Coproduct+import Data.Tree+import Data.Semigroup as Semigroup+import Control.Monad.Trans.Identity+import qualified Control.Monad.Trans.Writer.Lazy as Lazy+import qualified Control.Monad.Trans.Writer.Strict as Strict+import Control.Comonad.Trans.Env+import Control.Comonad.Trans.Store+import Control.Comonad.Trans.Traced+import Data.List.NonEmpty (NonEmpty(..))++-- | 'Copointed' does not require a 'Functor', as the only relationship+-- between 'copoint' and 'fmap' is given by a free theorem.++class Copointed p where+ copoint :: p a -> a++instance Copointed Identity where+ copoint = runIdentity++instance Default m => Copointed ((->)m) where+ copoint f = f def++instance (Default m, Copointed w) => Copointed (TracedT m w) where+ copoint (TracedT w) = copoint w def++instance Copointed ((,) a) where+ copoint = snd++instance Copointed ((,,) a b) where+ copoint (_,_,a) = a++instance Copointed ((,,,) a b c) where+ copoint (_,_,_,a) = a++instance Copointed Tree where+ copoint = rootLabel++instance (Copointed p, Copointed q) => Copointed (Compose p q) where+ copoint = copoint . copoint . getCompose++instance (Copointed p, Copointed q) => Copointed (Coproduct p q) where+ copoint = coproduct copoint copoint++instance Copointed m => Copointed (IdentityT m) where+ copoint = copoint . runIdentityT++instance Copointed m => Copointed (Lazy.WriterT w m) where+ copoint = fst . copoint . Lazy.runWriterT++instance Copointed m => Copointed (Strict.WriterT w m) where+ copoint = fst . copoint . Strict.runWriterT++instance Copointed Dual where+ copoint = getDual++instance Copointed Sum where+ copoint = getSum++instance Copointed NonEmpty where+ copoint ~(a :| _) = a++instance Copointed Semigroup.First where+ copoint = Semigroup.getFirst++instance Copointed Semigroup.Last where+ copoint = Semigroup.getLast++instance Copointed Semigroup.Max where+ copoint = Semigroup.getMax++instance Copointed Semigroup.Min where+ copoint = Semigroup.getMin++instance Copointed w => Copointed (EnvT e w) where+ copoint = copoint . lowerEnvT++instance Copointed w => Copointed (StoreT s w) where+ copoint (StoreT wf s) = copoint wf s
+ src/Data/Pointed.hs view
@@ -0,0 +1,160 @@+module Data.Pointed where++import Control.Arrow+import Control.Applicative+import Control.Concurrent.STM+import Data.Default+import qualified Data.Monoid as Monoid+import Data.Semigroup as Semigroup+import Data.Functor.Identity+import Data.Sequence (Seq)+import qualified Data.Sequence as Seq+import Data.Tree (Tree(..))+import Data.Set (Set)+import qualified Data.Set as Set+import Data.Functor.Constant+import qualified Data.Functor.Product as Functor+import Data.Functor.Compose+import Control.Monad.Trans.Cont+import Control.Monad.Trans.Error+import Control.Monad.Trans.List+import Control.Monad.Trans.Maybe+import Control.Monad.Trans.Identity+import Control.Monad.Trans.Reader+import Data.List.NonEmpty+import qualified Control.Monad.Trans.RWS.Lazy as Lazy+import qualified Control.Monad.Trans.RWS.Strict as Strict+import qualified Control.Monad.Trans.Writer.Lazy as Lazy+import qualified Control.Monad.Trans.Writer.Strict as Strict+import qualified Control.Monad.Trans.State.Lazy as Lazy+import qualified Control.Monad.Trans.State.Strict as Strict+import Data.Semigroupoid.Static++class Pointed p where+ point :: a -> p a++instance Pointed [] where+ point a = [a]++instance Pointed Maybe where+ point = Just++instance Pointed (Either a) where+ point = Right++instance Pointed IO where+ point = return++instance Pointed STM where+ point = return++instance Pointed Tree where+ point a = Node a []++instance Pointed NonEmpty where+ point a = a :| []++instance Pointed ZipList where+ point = pure++instance Pointed Identity where+ point = Identity++instance Pointed ((->)e) where+ point = const++instance Default e => Pointed ((,)e) where+ point = (,) def++instance Monad m => Pointed (WrappedMonad m) where+ point = WrapMonad . return++instance Default m => Pointed (Const m) where+ point _ = Const def++instance Arrow a => Pointed (WrappedArrow a b) where+ point = pure++instance Pointed Dual where+ point = Dual++instance Pointed Endo where+ point = Endo . const++instance Pointed Sum where+ point = Sum++instance Pointed Monoid.Product where+ point = Monoid.Product++instance Pointed Monoid.First where+ point = Monoid.First . Just++instance Pointed Monoid.Last where+ point = Monoid.Last . Just++instance Pointed Semigroup.First where+ point = Semigroup.First++instance Pointed Semigroup.Last where+ point = Semigroup.Last++instance Pointed Semigroup.Max where+ point = Semigroup.Max++instance Pointed Semigroup.Min where+ point = Semigroup.Min++instance Pointed Seq where+ point = Seq.singleton++instance Pointed Set where+ point = Set.singleton++instance (Pointed p, Pointed q) => Pointed (Compose p q) where+ point = Compose . point . point++instance (Pointed p, Pointed q) => Pointed (Functor.Product p q) where+ point a = Functor.Pair (point a) (point a)++instance Default m => Pointed (Constant m) where+ point _ = Constant def++instance Pointed (ContT r m) where+ point a = ContT ($ a)++instance Pointed m => Pointed (ErrorT e m) where+ point = ErrorT . point . Right++instance Pointed m => Pointed (IdentityT m) where+ point = IdentityT . point++instance Pointed m => Pointed (ListT m) where+ point = ListT . point . point++instance Pointed m => Pointed (MaybeT m) where+ point = MaybeT . point . point++instance Pointed m => Pointed (ReaderT r m) where+ point = ReaderT . const . point++instance (Default w, Pointed m) => Pointed (Lazy.RWST r w s m) where+ point a = Lazy.RWST $ \_ s -> point (a, s, def)++instance (Default w, Pointed m) => Pointed (Strict.RWST r w s m) where+ point a = Strict.RWST $ \_ s -> point (a, s, def)++instance (Default w, Pointed m) => Pointed (Lazy.WriterT w m) where+ point a = Lazy.WriterT $ point (a, def)++instance (Default w, Pointed m) => Pointed (Strict.WriterT w m) where+ point a = Strict.WriterT $ point (a, def)++instance Pointed m => Pointed (Lazy.StateT s m) where+ point a = Lazy.StateT $ \s -> point (a, s)++instance Pointed m => Pointed (Strict.StateT s m) where+ point a = Strict.StateT $ \s -> point (a, s)++instance Pointed m => Pointed (Static m a) where+ point = Static . point . const