packages feed

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