@@ -17,12 +17,16 @@ module Control.SemiIso
@@ -31,6 +35,7 @@ import Control.Applicative as X
31import Control.Arrow.Extra
35import Control.Arrow.Extra
32import Control.Monad as X
36import Control.Monad as X
33import Data.Bitraversable
37import Data.Bitraversable
34import Prelude hiding ((.), id)
39import Prelude hiding ((.), id)
36type AlternativeMonad m = (Alternative m, Monad m)
41type AlternativeMonad m = (Alternative m, Monad m)
@@ -116,24 +121,36 @@ a $$$ c = a *** c >>^ check (uncurry (==)) >>^ siPure fst (\x -> (x, x))
116(*>>) :: (PolyArrow m SemiIso) => m a () -> m a b -> m a b
121(*>>) :: (PolyArrow m SemiIso) => m a () -> m a b -> m a b
117a *>> b = a &&& b >>^ siPure snd ((),)
122a *>> b = a &&& b >>^ siPure snd ((),)
124+(&>>) :: (PolyArrow m SemiIso) => m a () -> m b c -> m (a, b) c
125+a &>> b = a *** b >>^ siPure snd ((),)
119(**>) :: (PolyArrow m SemiIso) => m () () -> m a b -> m a b
127(**>) :: (PolyArrow m SemiIso) => m () () -> m a b -> m a b
120a **> b = siPure ((),) snd ^>> a *** b >>^ siPure snd ((),)
128a **> b = siPure ((),) snd ^>> a *** b >>^ siPure snd ((),)
122(>>*) :: (PolyArrow m SemiIso, Eq b) => m a b -> m () b -> m a b
130(>>*) :: (PolyArrow m SemiIso, Eq b) => m a b -> m () b -> m a b
123a >>* b = siPure (,()) fst ^>> a $$$ b
131a >>* b = siPure (,()) fst ^>> a $$$ b
133+(>>&) :: (PolyArrow m SemiIso) => m a b -> m () c -> m a (b, c)
134+a >>& b = siPure (,()) fst ^>> a *** b >>> undefined
125(>**) :: (PolyArrow m SemiIso) => m a b -> m () () -> m a b
136(>**) :: (PolyArrow m SemiIso) => m a b -> m () () -> m a b
126a >** b = siPure (,()) fst ^>> a *** b >>^ siPure fst (,())
137a >** b = siPure (,()) fst ^>> a *** b >>^ siPure fst (,())
128(<<*) :: (PolyArrow m SemiIso, Eq b) => m a b -> m () b -> m a b
139(<<*) :: (PolyArrow m SemiIso, Eq b) => m a b -> m () b -> m a b
129a <<* b = siPure ((),) snd ^>> b $$$ a
140a <<* b = siPure ((),) snd ^>> b $$$ a
142+(<<&) :: (PolyArrow m SemiIso) => m a b -> m () c -> m a (b, c)
143+a <<& b = siPure ((),) snd ^>> b *** a >>^ siPure swap swap
131(<**) :: (PolyArrow m SemiIso) => m a b -> m () () -> m a b
145(<**) :: (PolyArrow m SemiIso) => m a b -> m () () -> m a b
132a <** b = siPure ((),) snd ^>> b *** a >>^ siPure snd ((),)
146a <** b = siPure ((),) snd ^>> b *** a >>^ siPure snd ((),)
134(*<<) :: (PolyArrow m SemiIso) => m a () -> m a b -> m a b
148(*<<) :: (PolyArrow m SemiIso) => m a () -> m a b -> m a b
135a *<< b = b &&& a >>^ siPure fst (,())
149a *<< b = b &&& a >>^ siPure fst (,())
151+(&<<) :: (PolyArrow m SemiIso) => m a () -> m b c -> m (a, b) c
152+a &<< b = siPure swap swap ^>> b *** a >>^ siPure fst (,())
137(**<) :: (PolyArrow m SemiIso) => m () () -> m a b -> m a b
154(**<) :: (PolyArrow m SemiIso) => m () () -> m a b -> m a b
138a **< b = siPure (,()) fst ^>> b *** a >>^ siPure fst (,())
155a **< b = siPure (,()) fst ^>> b *** a >>^ siPure fst (,())