From 7de614790f72f6a8ebe81ea8ec4ee173e81f406d Mon Sep 17 00:00:00 2001 From: ross Date: Mon, 6 Sep 2004 17:20:02 +0000 Subject: [PATCH] [project @ 2004-09-06 17:20:02 by ross] add some RULES --- Control/Arrow.hs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/Control/Arrow.hs b/Control/Arrow.hs index f6ee713..316ef06 100644 --- a/Control/Arrow.hs +++ b/Control/Arrow.hs @@ -93,6 +93,23 @@ class Arrow a where (&&&) :: a b c -> a b c' -> a b (c,c') f &&& g = arr (\b -> (b,b)) >>> f *** g +{-# RULES +"compose/arr" forall f g . + arr f >>> arr g = arr (f >>> g) +"first/arr" forall f . + first (arr f) = arr (first f) +"second/arr" forall f . + second (arr f) = arr (second f) +"product/arr" forall f g . + arr f *** arr g = arr (f *** g) +"fanout/arr" forall f g . + arr f &&& arr g = arr (f &&& g) +"compose/first" forall f g . + first f >>> first g = first (f >>> g) +"compose/second" forall f g . + second f >>> second g = second (f >>> g) + #-} + -- Ordinary functions are arrows. instance Arrow (->) where @@ -175,6 +192,21 @@ class Arrow a => ArrowChoice a where where untag (Left x) = x untag (Right y) = y +{-# RULES +"left/arr" forall f . + left (arr f) = arr (left f) +"right/arr" forall f . + right (arr f) = arr (right f) +"sum/arr" forall f g . + arr f +++ arr g = arr (f +++ g) +"fanin/arr" forall f g . + arr f ||| arr g = arr (f ||| g) +"compose/left" forall f g . + left f >>> left g = left (f >>> g) +"compose/right" forall f g . + right f >>> right g = right (f >>> g) + #-} + instance ArrowChoice (->) where left f = f +++ id right f = id +++ f -- 1.7.10.4