adjunctions 0.2 → 0.2.1
raw patch · 2 files changed
+58/−1 lines, 2 filesdep +comonaddep +comonad-transformersPVP ok
version bump matches the API change (PVP)
Dependencies added: comonad, comonad-transformers
API changes (from Hackage documentation)
+ Control.Comonad.Trans.Adjoint: AdjointT :: f (w (g a)) -> AdjointT f g w a
+ Control.Comonad.Trans.Adjoint: adjoint :: Functor f => f (g a) -> Adjoint f g a
+ Control.Comonad.Trans.Adjoint: instance (Adjunction f g, Comonad m) => Comonad (AdjointT f g m)
+ Control.Comonad.Trans.Adjoint: instance (Adjunction f g, Distributive g) => ComonadTrans (AdjointT f g)
+ Control.Comonad.Trans.Adjoint: instance (Adjunction f g, Functor m) => Functor (AdjointT f g m)
+ Control.Comonad.Trans.Adjoint: newtype AdjointT f g w a
+ Control.Comonad.Trans.Adjoint: runAdjoint :: Functor f => Adjoint f g a -> f (g a)
+ Control.Comonad.Trans.Adjoint: runAdjointT :: AdjointT f g w a -> f (w (g a))
+ Control.Comonad.Trans.Adjoint: type Adjoint f g = AdjointT f g Identity
Files
- Control/Comonad/Trans/Adjoint.hs +54/−0
- adjunctions.cabal +4/−1
+ Control/Comonad/Trans/Adjoint.hs view
@@ -0,0 +1,54 @@+{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, ImplicitParams #-}+-----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Trans.Adjoint+-- Copyright : (C) 2011 Edward Kmett+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Edward Kmett <ekmett@gmail.com>+-- Stability : provisional+-- Portability : MPTCs, fundeps+--+----------------------------------------------------------------------------++module Control.Comonad.Trans.Adjoint+ ( Adjoint+ , runAdjoint+ , adjoint+ , AdjointT(..)+ ) where++import Prelude hiding (sequence)+import Control.Applicative+import Control.Comonad+import Control.Comonad.Trans.Class+import Data.Functor.Adjunction+import Data.Functor.Identity+import Data.Distributive++type Adjoint f g = AdjointT f g Identity++newtype AdjointT f g w a = AdjointT { runAdjointT :: f (w (g a)) }++adjoint :: Functor f => f (g a) -> Adjoint f g a+adjoint = AdjointT . fmap Identity++runAdjoint :: Functor f => Adjoint f g a -> f (g a)+runAdjoint = fmap runIdentity . runAdjointT++instance (Adjunction f g, Functor m) => Functor (AdjointT f g m) where+ fmap f (AdjointT g) = AdjointT $ fmap (fmap (fmap f)) g+ b <$ (AdjointT g) = AdjointT $ fmap (fmap (b <$)) g++instance (Adjunction f g, Comonad m) => Comonad (AdjointT f g m) where+ extract = rightAdjunct extract . runAdjointT+ extend f (AdjointT m) = AdjointT $ fmap (extend $ leftAdjunct (f . AdjointT)) m+ +{-+instance (Adjunction f g, Monad m) => Applicative (AdjointT f g m) where+ pure = AdjointT . leftAdjunct return+ (<*>) = ap+-}+ +instance (Adjunction f g, Distributive g) => ComonadTrans (AdjointT f g) where+ lower = counit . fmap distribute . runAdjointT
adjunctions.cabal view
@@ -1,6 +1,6 @@ name: adjunctions category: Data Structures, Adjunctions-version: 0.2+version: 0.2.1 license: BSD3 cabal-version: >= 1.6 license-file: LICENSE@@ -21,10 +21,13 @@ build-depends: base >= 4 && < 4.4, contravariant >= 0.1.2 && < 0.2,+ comonad >= 0.6.2 && < 0.8,+ comonad-transformers >= 0.6.1 && < 0.8, transformers >= 0.2.0 && < 0.3 exposed-modules: Control.Monad.Trans.Adjoint+ Control.Comonad.Trans.Adjoint Data.Functor.Adjunction Data.Functor.Contravariant.Adjunction Data.Functor.Zap