adjunctions 0.3 → 0.3.1
raw patch · 2 files changed
+49/−2 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Control.Comonad.Contra: ContraT :: f (m (g a)) -> ContraT f g m a
+ Control.Comonad.Contra: contra :: Contravariant f => f (g a) -> Contra f g a
+ Control.Comonad.Contra: instance (Contravariant f, Contravariant g, Monad m) => Functor (ContraT f g m)
+ Control.Comonad.Contra: instance (DualAdjunction f g, Monad m) => Comonad (ContraT f g m)
+ Control.Comonad.Contra: newtype ContraT f g m a
+ Control.Comonad.Contra: runContra :: Contravariant f => Contra f g a -> f (g a)
+ Control.Comonad.Contra: runContraT :: ContraT f g m a -> f (m (g a))
+ Control.Comonad.Contra: type Contra f g = ContraT f g Identity
Files
- Control/Comonad/Contra.hs +46/−0
- adjunctions.cabal +3/−2
+ Control/Comonad/Contra.hs view
@@ -0,0 +1,46 @@+{-# LANGUAGE MultiParamTypeClasses #-}+-----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Contra+-- Copyright : (C) 2011 Edward Kmett+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Edward Kmett <ekmett@gmail.com>+-- Stability : provisional+-- Portability : MPTCs, fundeps+--+-- Use a contravariant dual adjunction from Hask^op to build a 'Monad' to +-- 'Comonad' transformer.+----------------------------------------------------------------------------++module Control.Comonad.Contra+ ( Contra+ , runContra+ , contra+ , ContraT(..)+ ) where++import Prelude hiding (sequence)+import Control.Comonad+import Control.Monad (liftM)+import Data.Functor.Identity+import Data.Functor.Contravariant+import Data.Functor.Contravariant.DualAdjunction++type Contra f g = ContraT f g Identity++newtype ContraT f g m a = ContraT { runContraT :: f (m (g a)) }++contra :: Contravariant f => f (g a) -> Contra f g a+contra = ContraT . contramap runIdentity++runContra :: Contravariant f => Contra f g a -> f (g a)+runContra = contramap Identity . runContraT++instance (Contravariant f, Contravariant g, Monad m) => Functor (ContraT f g m) where+ fmap f (ContraT g) = ContraT $ contramap (liftM (contramap f)) g+ +instance (DualAdjunction f g, Monad m) => Comonad (ContraT f g m) where+ extract = rightAdjunctOp return . runContraT+ extend f = ContraT . contramap (>>= leftAdjunctOp (f . ContraT)) . runContraT+
adjunctions.cabal view
@@ -1,6 +1,6 @@ name: adjunctions category: Data Structures, Adjunctions-version: 0.3+version: 0.3.1 license: BSD3 cabal-version: >= 1.6 license-file: LICENSE@@ -26,9 +26,10 @@ transformers >= 0.2.0 && < 0.3 exposed-modules:+ Control.Comonad.Contra+ Control.Comonad.Trans.Adjoint Control.Monad.Contra Control.Monad.Trans.Adjoint- Control.Comonad.Trans.Adjoint Data.Functor.Adjunction Data.Functor.Contravariant.Adjunction Data.Functor.Contravariant.DualAdjunction