packages feed

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 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