pointed 4.2 → 4.2.0.1
raw patch · 3 files changed
+81/−6 lines, 3 filesdep +hashabledep +unordered-containersdep ~basedep ~semigroupoids
Dependencies added: hashable, unordered-containers
Dependency ranges changed: base, semigroupoids
Files
- pointed.cabal +5/−3
- src/Data/Copointed.hs +35/−2
- src/Data/Pointed.hs +41/−1
pointed.cabal view
@@ -1,6 +1,6 @@ name: pointed category: Data-version: 4.2+version: 4.2.0.1 license: BSD3 cabal-version: >= 1.6 license-file: LICENSE@@ -27,11 +27,13 @@ containers >= 0.4 && < 0.6, comonad >= 4 && < 5, data-default-class >= 0.0.1 && < 0.1,+ hashable >= 1.1 && < 1.3, kan-extensions >= 4.2 && < 5, semigroups >= 0.8.3.1 && < 1,- semigroupoids >= 4 && < 5,+ semigroupoids >= 4 && < 6, stm >= 2.1.2.1 && < 2.5,- tagged >= 0.5 && < 1+ tagged >= 0.5 && < 1,+ unordered-containers >= 0.2 && < 0.3 exposed-modules: Data.Pointed
src/Data/Copointed.hs view
@@ -6,13 +6,18 @@ module Data.Copointed where import Data.Default.Class+import Data.Functor.Bind import Data.Functor.Identity import Data.Functor.Compose import Data.Functor.Coproduct-import Data.Functor.Kan.Lift+import Data.Functor.Reverse+import Data.Functor.Kan.Lift as Kan import qualified Data.Functor.Sum as F import Data.Tree import Data.Semigroup as Semigroup+import Control.Applicative+import Control.Applicative.Backwards+import Control.Applicative.Lift as Applicative import Control.Monad.Trans.Identity import qualified Control.Monad.Trans.Writer.Lazy as Lazy import qualified Control.Monad.Trans.Writer.Strict as Strict@@ -56,13 +61,23 @@ instance Copointed Tree where copoint = rootLabel +instance Copointed f => Copointed (Backwards f) where+ copoint = copoint . forwards+ 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 (Functor g, g ~ h) => Copointed (Lift g h) where+instance Copointed f => Copointed (Applicative.Lift f) where+ copoint (Pure a) = a+ copoint (Other fa) = copoint fa++instance Copointed f => Copointed (Reverse f) where+ copoint = copoint . getReverse++instance (Functor g, g ~ h) => Copointed (Kan.Lift g h) where copoint x = runIdentity (runLift x (fmap Identity)) {-# INLINE copoint #-} @@ -96,8 +111,26 @@ instance Copointed Semigroup.Min where copoint = Semigroup.getMin +instance Copointed WrappedMonoid where+ copoint = unwrapMonoid++#if MIN_VERSION_semigroups(0,16,2)+instance Copointed (Arg a) where+ copoint (Arg _ b) = b+#endif+ 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++instance Copointed f => Copointed (WrappedApplicative f) where+ copoint = copoint . unwrapApplicative++instance Copointed m => Copointed (WrappedMonad m) where+ copoint = copoint . unwrapMonad++instance Copointed f => Copointed (MaybeApply f) where+ copoint (MaybeApply (Left fa)) = copoint fa+ copoint (MaybeApply (Right a)) = a
src/Data/Pointed.hs view
@@ -3,20 +3,28 @@ #if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702 {-# LANGUAGE Safe #-} #endif+{-# OPTIONS_GHC -fno-warn-deprecations #-} module Data.Pointed where import Control.Arrow import Control.Applicative+import Control.Comonad import Control.Concurrent.STM import Data.Default.Class import qualified Data.Monoid as Monoid import Data.Semigroup as Semigroup import Data.Functor.Identity-import Data.Sequence (Seq)+import Data.Sequence (Seq, ViewL(..), ViewR(..)) import qualified Data.Sequence as Seq import Data.Tree (Tree(..))+import Data.Hashable+import Data.HashMap.Lazy (HashMap)+import qualified Data.HashMap.Lazy as HashMap+import Data.Map (Map)+import qualified Data.Map as Map import Data.Set (Set) import qualified Data.Set as Set+import Data.Functor.Bind import Data.Functor.Constant import Data.Functor.Kan.Rift import qualified Data.Functor.Product as Functor@@ -123,9 +131,32 @@ instance Pointed Semigroup.Min where point = Semigroup.Min +instance Pointed Option where+ point = Option . Just++instance Pointed WrappedMonoid where+ point = WrapMonoid++#if MIN_VERSION_semigroups(0,16,2)+instance Default a => Pointed (Arg a) where+ point = Arg def+#endif++instance (Default k, Hashable k) => Pointed (HashMap k) where+ point = HashMap.singleton def++instance Default k => Pointed (Map k) where+ point = Map.singleton def+ instance Pointed Seq where point = Seq.singleton +instance Pointed ViewL where+ point a = a :< Seq.empty++instance Pointed ViewR where+ point a = Seq.empty :> a+ instance Pointed Set where point = Set.singleton @@ -192,3 +223,12 @@ instance Pointed m => Pointed (Static m a) where point = Static . point . const++instance Pointed (Cokleisli w a) where+ point = Cokleisli . const++instance Pointed f => Pointed (WrappedApplicative f) where+ point = WrapApplicative . point++instance Pointed (MaybeApply f) where+ point = MaybeApply . Right