TypeCompose 0.9.7 → 0.9.8
raw patch · 3 files changed
+16/−16 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Control.Compose: class DistribM m n
+ Control.Compose: distribM :: DistribM m n => n (m a) -> m (n a)
+ Control.Compose: joinDistribM :: (Monad m, Monad n, DistribM m n) => (m :. n) ((m :. n) a) -> (m :. n) a
Files
- TypeCompose.cabal +2/−2
- src/Control/Compose.hs +13/−14
- src/Data/Partial.hs +1/−0
TypeCompose.cabal view
@@ -1,5 +1,5 @@ Name: TypeCompose-Version: 0.9.7+Version: 0.9.8 Synopsis: Type composition classes & instances Category: Composition, Control Cabal-Version: >= 1.6@@ -13,7 +13,7 @@ Author: Conal Elliott Maintainer: conal@conal.net Homepage: https://github.com/conal/TypeCompose-Copyright: (c) 2007-2012 by Conal Elliott+Copyright: (c) 2007-2013 by Conal Elliott License: BSD3 License-File: COPYING Stability: provisional
src/Control/Compose.hs view
@@ -11,7 +11,7 @@ ---------------------------------------------------------------------- -- | -- Module : Control.Compose--- Copyright : (c) Conal Elliott 2007-2012+-- Copyright : (c) Conal Elliott 2007-2013 -- License : BSD3 -- -- Maintainer : conal@conal.net@@ -36,7 +36,7 @@ , (:.)(..), O, unO, biO, convO, coconvO, inO, inO2, inO3 , oPure, oFmap, oLiftA2, oLiftA3 , fmapFF, fmapCC, contraFmapFC, contraFmapCF- -- , DistribM(..), joinMM+ , DistribM(..), joinDistribM , joinMMT, joinComposeT -- * Type composition -- ** Unary\/binary@@ -80,7 +80,7 @@ import Data.Foldable import Data.Traversable import Control.Applicative-import Control.Monad (join)+import Control.Monad (join,liftM) -- import Test.QuickCheck -- for Endo @@ -354,8 +354,6 @@ -{-- -- A first pass at monad composition. But now I've read "Composing -- Monads", and I know there's more to it. At least four different ways, -- all with conflicting Monad instances.@@ -366,26 +364,27 @@ class DistribM m n where distribM :: n (m a) -> m (n a) -instance (Monad m, Monad n, DistribM m n) => Monad (m :. n) where- return = O . return . return- e >>= f = joinMM (liftM f e)- -- | 'join' for @(m :. n)@-joinMM :: (Monad m, Monad n, DistribM m n) =>- (m :. n) ((m :. n) a) -> (m :. n) a-joinMM = O . liftM join . join . liftM distribM . unO . liftM unO+joinDistribM :: (Monad m, Monad n, DistribM m n) =>+ (m :. n) ((m :. n) a) -> (m :. n) a+joinDistribM = O . liftM join . join . liftM distribM . (liftM.liftM) unO . unO -- Derivation: -- -- (m :. n) ((m :. n) a)--- --> m (n (m (n a))) -- liftM unO -- --> m (n ((m :. n) a)) -- unO+-- --> m (n (m (n a))) -- (liftM.liftM) unO -- --> m (m (n (n a))) -- liftM distribM -- --> m (n (n a)) -- join -- --> m (n a) -- liftM join -- --> (m :. n) a -- O --}+-- Template for specialization:+-- +-- instance (Monad m, Monad n, DistribM m n) => Monad (m :. n) where+-- return = O . return . return+-- e >>= f = joinDistribM (liftM f e)+ -- | 'join'-like function for implicitly composed monads joinMMT :: (Monad m, Monad n, Traversable n, Applicative m) =>
src/Data/Partial.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE TypeSynonymInstances #-} {-# OPTIONS_GHC -Wall #-}+{-# OPTIONS_GHC -fno-warn-orphans #-} ---------------------------------------------------------------------- -- | -- Module : Data.Partial