X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Control%2FArrow.hs;h=55e004d29eba089373f19f1ea79de774e751e6ae;hb=4966da6b84e60869c917ffcc4ac8245c37b37b8f;hp=3fa7e1e04163ba0b184c7af235ebed64121a4d9c;hpb=53e1fe37ade34c02b796daa6f05614870b41f5d8;p=ghc-base.git diff --git a/Control/Arrow.hs b/Control/Arrow.hs index 3fa7e1e..55e004d 100644 --- a/Control/Arrow.hs +++ b/Control/Arrow.hs @@ -39,7 +39,6 @@ module Control.Arrow ( ) where import Prelude hiding (id,(.)) -import qualified Prelude import Control.Monad import Control.Monad.Fix @@ -75,7 +74,8 @@ class Category a => Arrow a where -- version if desired. second :: a b c -> a (d,b) (d,c) second f = arr swap >>> first f >>> arr swap - where swap ~(x,y) = (y,x) + where swap :: (x,y) -> (y,x) + swap ~(x,y) = (y,x) -- | Split the input between the two argument arrows and combine -- their output. Note that this is in general not a functor. @@ -94,8 +94,6 @@ class Category a => Arrow a where f &&& g = arr (\b -> (b,b)) >>> f *** g {-# RULES -"identity" - arr id = id "compose/arr" forall f g . (arr f) . (arr g) = arr (f . g) "first/arr" forall f . @@ -185,7 +183,8 @@ class Arrow a => ArrowChoice a where -- version if desired. right :: a b c -> a (Either d b) (Either d c) right f = arr mirror >>> left f >>> arr mirror - where mirror (Left x) = Right x + where mirror :: Either x y -> Either y x + mirror (Left x) = Right x mirror (Right y) = Left y -- | Split the input between the two argument arrows, retagging @@ -217,9 +216,9 @@ class Arrow a => ArrowChoice a where "fanin/arr" forall f g . arr f ||| arr g = arr (f ||| g) "compose/left" forall f g . - left f >>> left g = left (f >>> g) + left f . left g = left (f . g) "compose/right" forall f g . - right f >>> right g = right (f >>> g) + right f . right g = right (f . g) #-} instance ArrowChoice (->) where