deepcontrol 0.5.1.0 → 0.5.2.0
raw patch · 11 files changed
+356/−289 lines, 11 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- DeepControl.Monad: (---->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m5 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (--->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m4 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (--->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m4 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
- DeepControl.Monad: (--->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m4 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (-->--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (-->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m3 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
- DeepControl.Monad: (-->->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (-->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m3 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
- DeepControl.Monad: (-->>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (-->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m3 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
- DeepControl.Monad: (-->>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (->---==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (->--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
- DeepControl.Monad: (->-->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m2 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
- DeepControl.Monad: (->->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (->->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
- DeepControl.Monad: (->->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (->==) :: (Monad m1, Monad m2, Traversable m2) => m2 a -> (a -> m1 (m2 b)) -> m1 (m2 b)
- DeepControl.Monad: (->>--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (->>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m3 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
- DeepControl.Monad: (->>->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m2 (m3 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
- DeepControl.Monad: (->>>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (->>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
- DeepControl.Monad: (->>>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (>----==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (>---==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
- DeepControl.Monad: (>--->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (>--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
- DeepControl.Monad: (>-->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (>-->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
- DeepControl.Monad: (>-->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (>-==) :: (Monad m1, Monad m2, Traversable m2) => m1 a -> (a -> m1 (m2 b)) -> m1 (m2 b)
- DeepControl.Monad: (>->--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (>->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m3 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
- DeepControl.Monad: (>->->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (>->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m3 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
- DeepControl.Monad: (>->>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (>->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
- DeepControl.Monad: (>->>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (>=====>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => (a -> m1 (m2 (m3 (m4 (m5 b))))) -> (b -> m1 (m2 (m3 (m4 (m5 c))))) -> a -> m1 (m2 (m3 (m4 (m5 c))))
- DeepControl.Monad: (>====>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => (a -> m1 (m2 (m3 (m4 b)))) -> (b -> m1 (m2 (m3 (m4 c)))) -> a -> m1 (m2 (m3 (m4 c)))
- DeepControl.Monad: (>===>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => (a -> m1 (m2 (m3 b))) -> (b -> m1 (m2 (m3 c))) -> a -> m1 (m2 (m3 c))
- DeepControl.Monad: (>==>) :: (Monad m1, Monad m2, Traversable m2) => (a -> m1 (m2 b)) -> (b -> m1 (m2 c)) -> a -> m1 (m2 c)
- DeepControl.Monad: (>>---==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (>>--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
- DeepControl.Monad: (>>-->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (>>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m2 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
- DeepControl.Monad: (>>->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (>>->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
- DeepControl.Monad: (>>->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (>>>--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (>>>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
- DeepControl.Monad: (>>>->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (>>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
- DeepControl.Monad: (>>>>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m4 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
- DeepControl.Monad: (>>>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m3 (m4 a))) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
- DeepControl.Monad: (>>>>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m4 (m5 a)))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (---->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m5 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (--->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m4 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (--->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m4 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+ DeepControl.Monad: (--->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m4 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (-->--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (-->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m3 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+ DeepControl.Monad: (-->->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (-->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m3 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
+ DeepControl.Monad: (-->>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (-->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m3 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+ DeepControl.Monad: (-->>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (->---=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (->--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+ DeepControl.Monad: (->-->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m2 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
+ DeepControl.Monad: (->->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (->->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+ DeepControl.Monad: (->->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (->=) :: (Monad m1, Monad m2, Traversable m2) => m2 a -> (a -> m1 (m2 b)) -> m1 (m2 b)
+ DeepControl.Monad: (->>--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (->>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m3 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+ DeepControl.Monad: (->>->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m2 (m3 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
+ DeepControl.Monad: (->>>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (->>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+ DeepControl.Monad: (->>>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>----=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>---=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+ DeepControl.Monad: (>--->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
+ DeepControl.Monad: (>-->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>-->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+ DeepControl.Monad: (>-->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>-=) :: (Monad m1, Monad m2, Traversable m2) => m1 a -> (a -> m1 (m2 b)) -> m1 (m2 b)
+ DeepControl.Monad: (>->--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m3 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+ DeepControl.Monad: (>->->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m3 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
+ DeepControl.Monad: (>->>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+ DeepControl.Monad: (>->>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>>---=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>>--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+ DeepControl.Monad: (>>-->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m2 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
+ DeepControl.Monad: (>>->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>>->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+ DeepControl.Monad: (>>->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>>=>) :: (Monad m1, Monad m2, Traversable m2) => (a -> m1 (m2 b)) -> (b -> m1 (m2 c)) -> a -> m1 (m2 c)
+ DeepControl.Monad: (>>>--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>>>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+ DeepControl.Monad: (>>>->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
+ DeepControl.Monad: (>>>=>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => (a -> m1 (m2 (m3 b))) -> (b -> m1 (m2 (m3 c))) -> a -> m1 (m2 (m3 c))
+ DeepControl.Monad: (>>>>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m4 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>>>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m3 (m4 a))) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+ DeepControl.Monad: (>>>>=>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => (a -> m1 (m2 (m3 (m4 b)))) -> (b -> m1 (m2 (m3 (m4 c)))) -> a -> m1 (m2 (m3 (m4 c)))
+ DeepControl.Monad: (>>>>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m4 (m5 a)))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+ DeepControl.Monad: (>>>>>=>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => (a -> m1 (m2 (m3 (m4 (m5 b))))) -> (b -> m1 (m2 (m3 (m4 (m5 c))))) -> a -> m1 (m2 (m3 (m4 (m5 c))))
+ DeepControl.Monad.Morph: (|>=>) :: (Monad m3, MMonad t) => (forall a. m1 a -> t m2 a) -> (forall b. m2 b -> t m3 b) -> m1 c -> t m3 c
+ DeepControl.Monad.Morph: (|>>=>) :: (Monad m3, Monad m2, Monad (t2 m3), Monad (t2 (t2 m3)), MonadTrans_ x t1, Traversable x, MMonad t1, MMonad t2, SinkT t2) => (forall a. m1 a -> t1 (t2 m2) a) -> (forall b. m2 b -> t1 (t2 m3) b) -> m1 c -> t1 (t2 m3) c
+ DeepControl.Monad.Morph: (|>>>=>) :: (Monad m3, Monad m2, Monad (t2 m3), Monad (t2 (t2 m3)), Monad (t2 (t2 (t3 m3))), Monad (t2 (t3 m3)), Monad (t2 (t3 (t3 m3))), Monad (t3 m3), Monad (t3 m2), Monad (t3 (t2 (t3 m3))), Monad (t3 (t3 m3)), MonadTrans_ x1 t1, Traversable x1, MonadTrans_ x2 t2, Traversable x2, MMonad t1, MMonad t2, MMonad t3, SinkT t2, SinkT t3) => (forall a. m1 a -> t1 (t2 (t3 m2)) a) -> (forall b. m2 b -> t1 (t2 (t3 m3)) b) -> m1 c -> t1 (t2 (t3 m3)) c
Files
- DeepControl/Arrow.hs +10/−10
- DeepControl/Monad.hs +181/−181
- DeepControl/Monad/Morph.hs +52/−14
- DeepControl/Monad/Trans/Identity.hs +7/−4
- README.md +69/−42
- deepcontrol.cabal +5/−6
- test/unit_Monad-factorial.hs +1/−1
- test/unit_Monad-factorial2.hs +4/−4
- test/unit_Monad.hs +13/−13
- test/unit_MonadMorph-bind.hs +8/−8
- test/unit_MonadMorph.hs +6/−6
DeepControl/Arrow.hs view
@@ -33,7 +33,7 @@ instance (Monad m1, Monad m2, Traversable m2) => Category (Kleisli2 m1 m2) where id = Kleisli2 $ (.**) - (Kleisli2 g) . (Kleisli2 f) = Kleisli2 $ f >==> g+ (Kleisli2 g) . (Kleisli2 f) = Kleisli2 $ f >>=> g instance (Monad m1, Monad m2, Traversable m2) => Arrow (Kleisli2 m1 m2) where arr f = Kleisli2 $ (.**) . f@@ -47,12 +47,12 @@ instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => Category (Kleisli3 m1 m2 m3) where id = Kleisli3 $ (.***) - (Kleisli3 g) . (Kleisli3 f) = Kleisli3 $ f >===> g+ (Kleisli3 g) . (Kleisli3 f) = Kleisli3 $ f >>>=> g instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => Arrow (Kleisli3 m1 m2 m3) where arr f = Kleisli3 $ (.***) . f- first (Kleisli3 f) = Kleisli3 $ \ ~(b,d) -> f b >>>== \c -> (.***) (c,d)- second (Kleisli3 f) = Kleisli3 $ \ ~(d,b) -> f b >>>== \c -> (.***) (d,c)+ first (Kleisli3 f) = Kleisli3 $ \ ~(b,d) -> f b >>>= \c -> (.***) (c,d)+ second (Kleisli3 f) = Kleisli3 $ \ ~(d,b) -> f b >>>= \c -> (.***) (d,c) ---------------------------------------------------------------------- -- Kleisli4@@ -61,12 +61,12 @@ instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => Category (Kleisli4 m1 m2 m3 m4) where id = Kleisli4 $ (.****) - (Kleisli4 g) . (Kleisli4 f) = Kleisli4 $ f >====> g+ (Kleisli4 g) . (Kleisli4 f) = Kleisli4 $ f >>>>=> g instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => Arrow (Kleisli4 m1 m2 m3 m4) where arr f = Kleisli4 $ (.****) . f- first (Kleisli4 f) = Kleisli4 $ \ ~(b,d) -> f b >>>>== \c -> (.****) (c,d)- second (Kleisli4 f) = Kleisli4 $ \ ~(d,b) -> f b >>>>== \c -> (.****) (d,c)+ first (Kleisli4 f) = Kleisli4 $ \ ~(b,d) -> f b >>>>= \c -> (.****) (c,d)+ second (Kleisli4 f) = Kleisli4 $ \ ~(d,b) -> f b >>>>= \c -> (.****) (d,c) ---------------------------------------------------------------------- -- Kleisli5@@ -75,10 +75,10 @@ instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => Category (Kleisli5 m1 m2 m3 m4 m5) where id = Kleisli5 $ (.*****)- (Kleisli5 g) . (Kleisli5 f) = Kleisli5 $ f >=====> g+ (Kleisli5 g) . (Kleisli5 f) = Kleisli5 $ f >>>>>=> g instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => Arrow (Kleisli5 m1 m2 m3 m4 m5) where arr f = Kleisli5 $ (.*****) . f- first (Kleisli5 f) = Kleisli5 $ \ ~(b,d) -> f b >>>>>== \c -> (.*****) (c,d)- second (Kleisli5 f) = Kleisli5 $ \ ~(d,b) -> f b >>>>>== \c -> (.*****) (d,c)+ first (Kleisli5 f) = Kleisli5 $ \ ~(b,d) -> f b >>>>>= \c -> (.*****) (c,d)+ second (Kleisli5 f) = Kleisli5 $ \ ~(d,b) -> f b >>>>>= \c -> (.*****) (d,c)
DeepControl/Monad.hs view
@@ -28,7 +28,7 @@ -- * Level-0 -- ** bind (-<), (>-), - -- ** composite + -- ** fish (>->), (<-<), -- * Level-2@@ -37,57 +37,57 @@ -- ** sequence (>>~), -- ** cover-bind- (>-==), (->==), + (>-=), (->=), -- ** cover-sequence (>-~), (->~),- -- ** composite - (>==>), + -- ** fish + (>>=>), -- * Level-3 -- ** bind- (>>>==), + (>>>=), -- ** sequence (>>>~), -- ** cover-bind - (>>-==), (->>==), (>->==) ,(>--==),(->-==), (-->==), + (>>-=), (->>=), (>->=) ,(>--=),(->-=), (-->=), -- ** cover-sequence (>--~), (->-~), (-->~), (>>-~), (->>~), (>->~), - -- ** composite - (>===>),+ -- ** fish + (>>>=>), -- * Level-4 -- ** bind- (>>>>==), + (>>>>=), -- ** sequence (>>>>~), -- ** cover-bind - (--->==), (-->-==), (->--==), (>---==),- (-->>==), (->->==), (>-->==), (>->-==), (->>-==), (>>--==),- (->>>==), (>->>==), (>>->==), (>>>-==),+ (--->=), (-->-=), (->--=), (>---=),+ (-->>=), (->->=), (>-->=), (>->-=), (->>-=), (>>--=),+ (->>>=), (>->>=), (>>->=), (>>>-=), -- ** cover-sequence (--->~), (-->-~), (->--~), (>---~), (-->>~), (->->~), (>-->~), (>->-~), (->>-~), (>>--~), (->>>~), (>->>~), (>>->~), (>>>-~),- -- ** composite - (>====>), + -- ** fish + (>>>>=>), -- * Level-5 -- ** bind- (>>>>>==), + (>>>>>=), -- ** sequence (>>>>>~), -- ** cover-bind - (---->==), (--->-==), (-->--==), (->---==), (>----==),- (--->>==), (-->->==), (->-->==), (>--->==), (>-->-==), (->->-==), (-->>-==), (->>--==), (>->--==), (>>---==),- (-->>>==), (->->>==), (>-->>==), (>->->==), (->>->==), (>>-->==), (>>->-==), (>->>-==), (->>>-==), (>>>--==),- (->>>>==), (>->>>==), (>>->>==), (>>>->==), (>>>>-==),+ (---->=), (--->-=), (-->--=), (->---=), (>----=),+ (--->>=), (-->->=), (->-->=), (>--->=), (>-->-=), (->->-=), (-->>-=), (->>--=), (>->--=), (>>---=),+ (-->>>=), (->->>=), (>-->>=), (>->->=), (->>->=), (>>-->=), (>>->-=), (>->>-=), (->>>-=), (>>>--=),+ (->>>>=), (>->>>=), (>>->>=), (>>>->=), (>>>>-=), -- ** cover-sequence (---->~), (--->-~), (-->--~), (->---~), (>----~), (--->>~), (-->->~), (->-->~), (>--->~), (>-->-~), (->->-~), (-->>-~), (->>--~), (>->--~), (>>---~), (-->>>~), (->->>~), (>-->>~), (>->->~), (->>->~), (>>-->~), (>>->-~), (>->>-~), (->>>-~), (>>>--~), (->>>>~), (>->>>~), (>>->>~), (>>>->~), (>>>>-~),- -- ** composite - (>=====>), + -- ** fish + (>>>>>=>), ) where @@ -100,13 +100,13 @@ -- Level-0 functions infixl 1 -<, >---- | Anologous for @'$'@, but (-<) is left associative.+-- | Anologous to @'$'@, but (-<) is left associative. -- -- >>> Just -< 3 -- Just 3 (-<) :: (a -> b) -> a -> b (-<) = ($)--- | The auguments-flipped function for @'-<'@.+-- | The auguments-flipped function of @'-<'@. -- -- >>> 3 >- Just -- Just 3@@ -114,7 +114,7 @@ -- >>> :{ -- let plus :: Int -> Int -> Int -- plus x y = --- x >- \a -> -- (>-) is the level-0 bind function, analogous for (>>=)+-- x >- \a -> -- (>-) is the level-0 bind function, analogous to (>>==) -- y >- \b -> -- a + b -- in plus 3 4@@ -125,13 +125,13 @@ (>-) = flip (-<) infixr 1 <-<, >->--- | Anologous for @'.'@, but the infix preference is low.+-- | Anologous to @'.'@, but the infix preference is low. -- -- >>> ((3+) <-< (2*) <-< (1+)) -< 1 -- 7 (<-<) :: (b -> c) -> (a -> b) -> a -> c (<-<) = (.)--- | The auguments-flipped function for @'<-<'@. +-- | The auguments-flipped function of @'<-<'@. -- -- >>> 1 >- ((+1) >-> (*2) >-> (+3)) -- 7@@ -144,16 +144,16 @@ ------------------------------------------------------------------------------- -- Level-2 functions -infixr 1 >==>+infixr 1 >>=> infixr 1 >>==, >>~-infixr 1 ->==, >-==+infixr 1 ->=, >-= infixr 1 ->~, >-~ --- | The level-2 bind function, analogous for @'>>='@.+-- | The level-2 bind function, analogous to @'>>='@. -- -- >>> :{ -- -- List-List monad--- [["a","b"]] >>== \x -> -- (>>==) is the level-2 bind function, analogous for (>>=)+-- [["a","b"]] >>== \x -> -- (>>==) is the level-2 bind function, analogous to (>>==) -- [[0],[1,2]] >>== \y -> -- (.**) (x ++ show y) -- :}@@ -175,30 +175,30 @@ (>>==) :: (Monad m1, Monad m2, Traversable m2) => m1 (m2 a) -> (a -> m1 (m2 b)) -> m1 (m2 b) m >>== f = m >>= \x -> join |$> (sink $ f |$> x) --- | The level-2 composite function, analogous for @'>=>'@.-(>==>) :: (Monad m1, Monad m2, Traversable m2) => (a -> m1 (m2 b)) -> (b -> m1 (m2 c)) -> a -> m1 (m2 c)-f >==> g = \x -> f x >>== g--- | The level-2 sequence function, analogous for @'>>'@.+-- | The level-2 fish function, analogous to @'>=>'@.+(>>=>) :: (Monad m1, Monad m2, Traversable m2) => (a -> m1 (m2 b)) -> (b -> m1 (m2 c)) -> a -> m1 (m2 c)+f >>=> g = \x -> f x >>== g+-- | The level-2 sequence function, analogous to @'>>'@. ----- Definition: @ m >>~ f = m >>== \\_ -> f @+-- Definition: @ m >>~ f = m >>= \\_ -> f @ (>>~) :: (Monad m1, Monad m2, Traversable m2) => m1 (m2 a) -> m1 (m2 b) -> m1 (m2 b) m >>~ f = m >>== \_ -> f--- | A level-2 cover-bind function, analogous for @'>>='@.+-- | A level-2 cover-bind function, analogous to @'>>='@. ----- Definition: @ m >-== f = (-*) m >>== f @-(>-==) :: (Monad m1, Monad m2, Traversable m2) => m1 a -> (a -> m1 (m2 b)) -> m1 (m2 b)-m >-== f = (-*) m >>== f--- | A level-2 cover-bind function, analogous for @'>>='@.+-- Definition: @ m >-= f = (-*) m >>= f @+(>-=) :: (Monad m1, Monad m2, Traversable m2) => m1 a -> (a -> m1 (m2 b)) -> m1 (m2 b)+m >-= f = (-*) m >>== f+-- | A level-2 cover-bind function, analogous to @'>>='@. ----- Definition: @ m ->== f = (.*) m >>== f @-(->==) :: (Monad m1, Monad m2, Traversable m2) => m2 a -> (a -> m1 (m2 b)) -> m1 (m2 b)-m ->== f = (.*) m >>== f--- | A level-2 cover-sequence function, analogous for @'>>'@.+-- Definition: @ m ->= f = (.*) m >>= f @+(->=) :: (Monad m1, Monad m2, Traversable m2) => m2 a -> (a -> m1 (m2 b)) -> m1 (m2 b)+m ->= f = (.*) m >>== f+-- | A level-2 cover-sequence function, analogous to @'>>'@. -- -- Definition: @ m >-~ f = (-*) m >>~ f @ (>-~) :: (Monad m1, Monad m2, Traversable m2) => m1 a -> m1 (m2 b) -> m1 (m2 b) m >-~ f = (-*) m >>~ f--- | A level-2 cover-sequence function, analogous for @'>>'@.+-- | A level-2 cover-sequence function, analogous to @'>>'@. -- -- Definition: @ m ->~ f = (.*) m >>~ f @ (->~) :: (Monad m1, Monad m2, Traversable m2) => m2 a -> m1 (m2 b) -> m1 (m2 b)@@ -207,18 +207,18 @@ ------------------------------------------------------------------------------- -- Level-3 functions -infixr 1 >===>-infixr 1 >>>==, >>>~-infixr 1 >--==, ->-==, -->==, >>-==, >->==, ->>==+infixr 1 >>>=>+infixr 1 >>>=, >>>~+infixr 1 >--=, ->-=, -->=, >>-=, >->=, ->>= infixr 1 >--~, ->-~, -->~, >>-~, >->~, ->>~ --- | The level-3 bind function, analogous for @'>>='@.+-- | The level-3 bind function, analogous to @'>>='@. -- -- >>> :{ -- -- IO-List-List monad--- (.*) [["a","b"]] >>>== \x -> -- (>>>==) is the level-3 bind function, analogous for (>>=)--- (.*) [[0],[1,2]] >>>== \y ->--- (-**) (print (x,y)) >>>~ -- (>>>~) is the level-3 sequence function, analogous for (>>)+-- (.*) [["a","b"]] >>>= \x -> -- (>>>=) is the level-3 bind function, analogous to (>>==)+-- (.*) [[0],[1,2]] >>>= \y ->+-- (-**) (print (x,y)) >>>~ -- (>>>~) is the level-3 sequence function, analogous to (>>) -- (.***) (x ++ show y) -- :} -- ("a",0)@@ -233,9 +233,9 @@ -- -- >>> :{ -- -- IO-List-List monad--- [["a","b"]] ->>== \x -> -- (->>==) is a level-3 cover-bind function, analogous for (>>=)--- [[0],[1,2]] ->>== \y ->--- print (x,y) >--~ -- (>--~) is a level-3 cover-sequence function, analogous for (>>)+-- [["a","b"]] ->>= \x -> -- (->>=) is a level-3 cover-bind function, analogous to (>>==)+-- [[0],[1,2]] ->>= \y ->+-- print (x,y) >--~ -- (>--~) is a level-3 cover-sequence function, analogous to (>>) -- (.***) (x ++ show y) -- :} -- ("a",0)@@ -246,26 +246,26 @@ -- ("b",2) -- [["a0","b0"],["a0","b1","b2"],["a1","a2","b0"],["a1","a2","b1","b2"]] ---(>>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))-m >>>== f = m >>== \x -> join |$>> (sink2 $ f |$> x)+(>>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))+m >>>= f = m >>== \x -> join |$>> (sink2 $ f |$> x) -(>===>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => (a -> m1 (m2 (m3 b))) -> (b -> m1 (m2 (m3 c))) -> a -> m1 (m2 (m3 c))-f >===> g = \x -> f x >>>== g+(>>>=>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => (a -> m1 (m2 (m3 b))) -> (b -> m1 (m2 (m3 c))) -> a -> m1 (m2 (m3 c))+f >>>=> g = \x -> f x >>>= g (>>>~) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m2 (m3 a)) -> m1 (m2 (m3 b)) -> m1 (m2 (m3 b))-m >>>~ k = m >>>== \_ -> k+m >>>~ k = m >>>= \_ -> k -(>--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))-m >--== k = (-**) m >>>== k-(->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m2 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))-m ->-== k = (*-*) m >>>== k-(-->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m3 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))-m -->== k = (.**) m >>>== k-(>>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m2 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))-m >>-== k = (--*) m >>>== k-(->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m2 (m3 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))-m ->>== k = (.*) m >>>== k-(>->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m3 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))-m >->== k = (-*) m >>>== k+(>--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))+m >--= k = (-**) m >>>= k+(->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m2 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))+m ->-= k = (*-*) m >>>= k+(-->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m3 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))+m -->= k = (.**) m >>>= k+(>>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m2 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))+m >>-= k = (--*) m >>>= k+(->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m2 (m3 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))+m ->>= k = (.*) m >>>= k+(>->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m3 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))+m >->= k = (-*) m >>>= k (-->~) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m3 a -> m1 (m2 (m3 b)) -> m1 (m2 (m3 b)) m -->~ k = (.**) m >>>~ k (->-~) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m2 a -> m1 (m2 (m3 b)) -> m1 (m2 (m3 b))@@ -282,53 +282,53 @@ ------------------------------------------------------------------------------- -- Level-4 functions -infixr 1 >====>-infixr 1 >>>>==, >>>>~-infixr 1 --->==, -->-==, ->--==, >---==-infixr 1 -->>==, ->->==, >-->==, >->-==, ->>-==, >>--==-infixr 1 ->>>==, >->>==, >>->==, >>>-==+infixr 1 >>>>=>+infixr 1 >>>>=, >>>>~+infixr 1 --->=, -->-=, ->--=, >---=+infixr 1 -->>=, ->->=, >-->=, >->-=, ->>-=, >>--=+infixr 1 ->>>=, >->>=, >>->=, >>>-= infixr 1 --->~, -->-~, ->--~, >---~ infixr 1 -->>~, ->->~, >-->~, >->-~, ->>-~, >>--~ infixr 1 ->>>~, >->>~, >>->~, >>>-~ -(>>>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m3 (m4 a))) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))-m >>>>== f = m >>>== \x -> join |$>>> (sink3 $ f |$> x)+(>>>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m3 (m4 a))) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))+m >>>>= f = m >>>= \x -> join |$>>> (sink3 $ f |$> x) -(>====>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => (a -> m1 (m2 (m3 (m4 b)))) -> (b -> m1 (m2 (m3 (m4 c)))) -> a -> m1 (m2 (m3 (m4 c)))-f >====> g = \x -> f x >>>>== g+(>>>>=>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => (a -> m1 (m2 (m3 (m4 b)))) -> (b -> m1 (m2 (m3 (m4 c)))) -> a -> m1 (m2 (m3 (m4 c)))+f >>>>=> g = \x -> f x >>>>= g (>>>>~) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m3 (m4 a))) -> m1 (m2 (m3 (m4 b))) -> m1 (m2 (m3 (m4 b)))-m >>>>~ k = m >>>>== \_ -> k+m >>>>~ k = m >>>>= \_ -> k -(--->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m4 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))-m --->== k = (.***) m >>>>== k -(-->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m3 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))-m -->-== k = (**-*) m >>>>== k -(->--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))-m ->--== k = (*-**) m >>>>== k -(>---==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))-m >---== k = (-***) m >>>>== k+(--->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m4 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))+m --->= k = (.***) m >>>>= k +(-->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m3 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))+m -->-= k = (**-*) m >>>>= k +(->--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))+m ->--= k = (*-**) m >>>>= k +(>---=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))+m >---= k = (-***) m >>>>= k -(-->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m3 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))-m -->>== k = (.**) m >>>>== k -(->->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))-m ->->== k = (*-*) m >>>>== k -(>-->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))-m >-->== k = (-**) m >>>>== k -(>->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m3 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))-m >->-== k = (-*-*) m >>>>== k -(->>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m3 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))-m ->>-== k = (*--*) m >>>>== k -(>>--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))-m >>--== k = (--**) m >>>>== k +(-->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m3 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))+m -->>= k = (.**) m >>>>= k +(->->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))+m ->->= k = (*-*) m >>>>= k +(>-->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))+m >-->= k = (-**) m >>>>= k +(>->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m3 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))+m >->-= k = (-*-*) m >>>>= k +(->>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m3 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))+m ->>-= k = (*--*) m >>>>= k +(>>--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))+m >>--= k = (--**) m >>>>= k -(->>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))-m ->>>== k = (.*) m >>>>== k -(>->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))-m >->>== k = (-*) m >>>>== k -(>>->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))-m >>->== k = (--*) m >>>>== k -(>>>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))-m >>>-== k = (---*) m >>>>== k +(->>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))+m ->>>= k = (.*) m >>>>= k +(>->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))+m >->>= k = (-*) m >>>>= k +(>>->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))+m >>->= k = (--*) m >>>>= k +(>>>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))+m >>>-= k = (---*) m >>>>= k (--->~) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m4 a -> m1 (m2 (m3 (m4 b))) -> m1 (m2 (m3 (m4 b))) m --->~ k = (.***) m >>>>~ k@@ -364,89 +364,89 @@ ------------------------------------------------------------------------------- -- Level-5 functions -infixr 1 >=====>-infixr 1 >>>>>~, >>>>>==-infixr 1 ---->==, --->-==, -->--==, ->---==, >----==-infixr 1 --->>==, -->->==, ->-->==, >--->==, >-->-==, ->->-==, -->>-==, ->>--==, >->--==, >>---==-infixr 1 -->>>==, ->->>==, >-->>==, >->->==, ->>->==, >>-->==, >>->-==, >->>-==, ->>>-==, >>>--==-infixr 1 ->>>>==, >->>>==, >>->>==, >>>->==, >>>>-==+infixr 1 >>>>>=>+infixr 1 >>>>>~, >>>>>=+infixr 1 ---->=, --->-=, -->--=, ->---=, >----=+infixr 1 --->>=, -->->=, ->-->=, >--->=, >-->-=, ->->-=, -->>-=, ->>--=, >->--=, >>---=+infixr 1 -->>>=, ->->>=, >-->>=, >->->=, ->>->=, >>-->=, >>->-=, >->>-=, ->>>-=, >>>--=+infixr 1 ->>>>=, >->>>=, >>->>=, >>>->=, >>>>-= infixr 1 ---->~, --->-~, -->--~, ->---~, >----~ infixr 1 --->>~, -->->~, ->-->~, >--->~, >-->-~, ->->-~, -->>-~, ->>--~, >->--~, >>---~ infixr 1 -->>>~, ->->>~, >-->>~, >->->~, ->>->~, >>-->~, >>->-~, >->>-~, ->>>-~, >>>--~ infixr 1 ->>>>~, >->>>~, >>->>~, >>>->~, >>>>-~ -(>>>>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m4 (m5 a)))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m >>>>>== f = m >>>>== \x -> join |$>>>> (sink4 $ f |$> x)+(>>>>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m4 (m5 a)))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m >>>>>= f = m >>>>= \x -> join |$>>>> (sink4 $ f |$> x) -(>=====>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => (a -> m1 (m2 (m3 (m4 (m5 b))))) -> (b -> m1 (m2 (m3 (m4 (m5 c))))) -> a -> m1 (m2 (m3 (m4 (m5 c))))-f >=====> g = \x -> f x >>>>>== g+(>>>>>=>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => (a -> m1 (m2 (m3 (m4 (m5 b))))) -> (b -> m1 (m2 (m3 (m4 (m5 c))))) -> a -> m1 (m2 (m3 (m4 (m5 c))))+f >>>>>=> g = \x -> f x >>>>>= g (>>>>>~) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m4 (m5 a)))) -> m1 (m2 (m3 (m4 (m5 b)))) -> m1 (m2 (m3 (m4 (m5 b))))-m >>>>>~ k = m >>>>>== \_ -> k+m >>>>>~ k = m >>>>>= \_ -> k -(---->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m5 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m ---->== k = (.****) m >>>>>== k -(--->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m4 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m --->-== k = (***-*) m >>>>>== k -(-->--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m -->--== k = (**-**) m >>>>>== k -(->---==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m ->---== k = (*-***) m >>>>>== k -(>----==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m >----== k = (-****) m >>>>>== k +(---->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m5 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m ---->= k = (.****) m >>>>>= k +(--->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m4 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m --->-= k = (***-*) m >>>>>= k +(-->--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m -->--= k = (**-**) m >>>>>= k +(->---=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m ->---= k = (*-***) m >>>>>= k +(>----=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m >----= k = (-****) m >>>>>= k -(--->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m4 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m --->>== k = (.***) m >>>>>== k -(-->->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m -->->== k = (**-*) m >>>>>== k -(->-->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m ->-->== k = (*-**) m >>>>>== k -(>--->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m >--->== k = (-***) m >>>>>== k -(>-->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m >-->-== k = (-**-*) m >>>>>== k -(->->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m ->->-== k = (*-*-*) m >>>>>== k -(-->>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m -->>-== k = (**--*) m >>>>>== k -(->>--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m ->>--== k = (*--**) m >>>>>== k -(>->--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m >->--== k = (-*-**) m >>>>>== k -(>>---==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m >>---== k = (--***) m >>>>>== k +(--->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m4 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m --->>= k = (.***) m >>>>>= k +(-->->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m -->->= k = (**-*) m >>>>>= k +(->-->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m ->-->= k = (*-**) m >>>>>= k +(>--->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m >--->= k = (-***) m >>>>>= k +(>-->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m >-->-= k = (-**-*) m >>>>>= k +(->->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m ->->-= k = (*-*-*) m >>>>>= k +(-->>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m -->>-= k = (**--*) m >>>>>= k +(->>--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m ->>--= k = (*--**) m >>>>>= k +(>->--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m >->--= k = (-*-**) m >>>>>= k +(>>---=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m >>---= k = (--***) m >>>>>= k -(-->>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m -->>>== k = (.**) m >>>>>== k -(->->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m ->->>== k = (*-*) m >>>>>== k -(>-->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m >-->>== k = (-**) m >>>>>== k -(>->->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m >->->== k = (-*-*) m >>>>>== k -(->>->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m ->>->== k = (*--*) m >>>>>== k -(>>-->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m >>-->== k = (--**) m >>>>>== k -(>>->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m >>->-== k = (--*-*) m >>>>>== k -(>->>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m >->>-== k = (-*--*) m >>>>>== k -(->>>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m ->>>-== k = (*---*) m >>>>>== k -(>>>--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m >>>--== k = (---**) m >>>>>== k +(-->>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m -->>>= k = (.**) m >>>>>= k +(->->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m ->->>= k = (*-*) m >>>>>= k +(>-->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m >-->>= k = (-**) m >>>>>= k +(>->->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m >->->= k = (-*-*) m >>>>>= k +(->>->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m ->>->= k = (*--*) m >>>>>= k +(>>-->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m >>-->= k = (--**) m >>>>>= k +(>>->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m >>->-= k = (--*-*) m >>>>>= k +(>->>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m >->>-= k = (-*--*) m >>>>>= k +(->>>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m ->>>-= k = (*---*) m >>>>>= k +(>>>--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m >>>--= k = (---**) m >>>>>= k -(->>>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m ->>>>== k = (.*) m >>>>>== k -(>->>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m >->>>== k = (-*) m >>>>>== k -(>>->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m >>->>== k = (--*) m >>>>>== k -(>>>->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m >>>->== k = (---*) m >>>>>== k -(>>>>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m4 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))-m >>>>-== k = (----*) m >>>>>== k +(->>>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m ->>>>= k = (.*) m >>>>>= k +(>->>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m >->>>= k = (-*) m >>>>>= k +(>>->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m >>->>= k = (--*) m >>>>>= k +(>>>->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m >>>->= k = (---*) m >>>>>= k +(>>>>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m4 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))+m >>>>-= k = (----*) m >>>>>= k (---->~) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m5 a -> m1 (m2 (m3 (m4 (m5 b)))) -> m1 (m2 (m3 (m4 (m5 b))))
DeepControl/Monad/Morph.hs view
@@ -26,10 +26,14 @@ (|>|), (|<|), -- ** trans-cover (|*|),+ -- ** trans-fish+ (|>=>), -- * Level-2 -- ** trans-bind (|>>=),+ -- ** trans-fish+ (|>>=>), -- ** trans-map (|>>|), (|<<|), -- ** trans-cover @@ -39,7 +43,9 @@ -- * Level-3 -- ** trans-bind (|>>>=),- -- ** trans-map+ -- ** trans-fish+ (|>>>=>),+ -- ** trans-map (|>>>|), (|<<<|), -- ** trans-cover (|***|),@@ -80,7 +86,7 @@ import DeepControl.Monad.Trans import Control.Monad.Morph--- import Control.Monad.Identity (Identity(..))+import Control.Monad.Identity (Identity(..)) import Control.Monad.Trans.Identity (IdentityT(..)) import Control.Monad.Trans.Maybe (MaybeT(..)) import Control.Monad.List (ListT(..))@@ -92,6 +98,14 @@ -- SinkT class (MonadTrans s) => SinkT s where+ -- | Alalog to @'DeepControl.Traversable.sink'@.+ -- + -- >>> sinkT $ MaybeT (ListT (Right [Just 1]))+ -- ListT (MaybeT (Right (Just [1])))+ --+ -- >>> sinkT $ MaybeT (ListT (ExceptT (Identity (Right [Just 1]))))+ -- ListT (MaybeT (ExceptT (Identity (Right (Just [1])))))+ -- sinkT :: (Monad m, MMonad t, MonadTrans_ x t, Traversable x) => s (t m) a -> t (s m) a@@ -111,6 +125,11 @@ sinkToTuple = flipTuple . sink . (flipTuple|$>) flipTuple (x,y) = (y,x) +-- | Alalog to @'DeepControl.Traversable.sink2'@.+-- +-- >>> sinkT2 $ MaybeT (ListT (ExceptT (Identity (Right [Just 1]))))+-- ListT (ExceptT (MaybeT (Identity (Just (Right [1])))))+-- sinkT2 :: (Monad m, Monad (s (t2 m)), Monad (t2 m), MonadTrans_ x1 t1, Traversable x1, MonadTrans_ x2 t2, Traversable x2, SinkT s, MMonad t1, MMonad t2) =>@@ -157,6 +176,10 @@ m |>~ k = m |>= \_ -> k -} +infixr 3 |>=>+(|>=>) :: (Monad m3, MMonad t) => (forall a. m1 a -> t m2 a) -> (forall b. m2 b -> t m3 b) -> m1 c -> t m3 c+(|>=>) = (>|>)+ ------------------------------------------------------------------------------- -- Level-2 functions @@ -168,6 +191,13 @@ t1 (t2 m) b -> (forall a. m a -> t1 (t2 n) a) -> t1 (t2 n) b m |>>= f = m |>= \x -> squash |>| (sinkT $ f |>| x) +infixr 3 |>>=>+(|>>=>) :: (Monad m3, Monad m2, Monad (t2 m3), Monad (t2 (t2 m3)), + MonadTrans_ x t1, Traversable x, + MMonad t1, MMonad t2, SinkT t2) => + (forall a. m1 a -> t1 (t2 m2) a) -> (forall b. m2 b -> t1 (t2 m3) b) -> m1 c -> t1 (t2 m3) c+f |>>=> g = \x -> f x |>>= g+ infixl 4 |>>| (|>>|) :: (Monad m, Monad (t2 m), MFunctor t1, MFunctor t2) => (forall a . m a -> n a) -> t1 (t2 m) b -> t1 (t2 n) b@@ -199,6 +229,14 @@ t1 (t2 (t3 m)) b -> (forall a. m a -> t1 (t2 (t3 n)) a) -> t1 (t2 (t3 n)) b m |>>>= f = m |>>= \x -> squash |>>| (sinkT2 $ f |>| x) +infixr 3 |>>>=>+(|>>>=>) :: (Monad m3, Monad m2, Monad (t2 m3), Monad (t2 (t2 m3)), Monad (t2 (t2 (t3 m3))), Monad (t2 (t3 m3)), Monad (t2 (t3 (t3 m3))), + Monad (t3 m3), Monad (t3 m2), Monad (t3 (t2 (t3 m3))), Monad (t3 (t3 m3)), + MonadTrans_ x1 t1, Traversable x1, MonadTrans_ x2 t2, Traversable x2, + MMonad t1, MMonad t2, MMonad t3, SinkT t2, SinkT t3) => + (forall a. m1 a -> t1 (t2 (t3 m2)) a) -> (forall b. m2 b -> t1 (t2 (t3 m3)) b) -> m1 c -> t1 (t2 (t3 m3)) c+f |>>>=> g = \x -> f x |>>>= g+ infixl 4 |>>>| (|>>>|) :: (Monad m, Monad (t3 m), Monad (t2 (t3 m)), MFunctor t1, MFunctor t2, MFunctor t3) => (forall a . m a -> n a) -> t1 (t2 (t3 m)) b -> t1 (t2 (t3 n)) b@@ -434,10 +472,10 @@ >tick :: State Int () >tick = modify (+1) >->tock :: StateT Int IO ()+>tock :: StateT Int IO () >tock = do-> generalize |>| tick :: (Monad m) => StateT Int m () -- (|>|) is the level-1 trans-map function, analogous to (|$>) -> lift $ putStrLn "Tock!" :: (MonadTrans t) => t IO ()+> generalize |>| tick :: (Monad m) => StateT Int m () -- (|>|) is the level-1 trans-map function, analogous to (|$>) +> (|*|) $ putStrLn "Tock!" :: (MonadTrans t) => t IO () > >-- λ> runStateT tock 0 >-- Tock!@@ -447,11 +485,11 @@ >save :: StateT Int (Writer [Int]) () >save = do > n <- get-> lift $ tell [n]+> (|*|) $ tell [n] > >program :: StateT Int (WriterT [Int] IO) () >program = replicateM_ 4 $ do-> lift |>| tock+> (|*|) |>| tock > :: (MonadTrans t) => StateT Int (t IO) () > generalize |>>| save -- (|>>|) is the level-2 trans-map function, analogous to (|$>>) > :: (Monad m) => StateT Int (WriterT [Int] m ) ()@@ -477,9 +515,9 @@ >----------------------------------------------- >-- Level-1 >->catchIOError :: IO a -> +>check :: IO a -> > ExceptT IOException IO a -- ExceptT-IO monad->catchIOError io = ExceptT $ (try io)+>check io = ExceptT $ (try io) > >viewFile :: IO () -- IO monad >viewFile = do@@ -487,7 +525,7 @@ > putStr str > >program :: ExceptT IOException IO () -- ExceptT-IO monad->program = (|*|) viewFile |>= catchIOError -- (|*|) is the level-1 trans-cover function, alias to 'lift', analogous to (.*)+>program = (|*|) viewFile |>= check -- (|*|) is the level-1 trans-cover function, alias to 'lift' and analogous to (.*) > -- (|>=) is the level-1 trans-bind function, analogous to (>>=) > >calc_program :: IO (Either IOException ())@@ -503,20 +541,20 @@ > MaybeT IO () -- MaybeT-IO monad >viewFile2 filename = do > guard (filename /= "")-> str <- (|*|) $ readFile "test.txt" +> str <- (|*|) $ readFile filename > (|*|) $ putStr str > >program2 :: String -> > (ExceptT IOException (MaybeT IO)) () -- ExceptT-MaybeT-IO monad >program2 filename = > (|*|) (viewFile2 filename) |>>= \x -> -- (|>>=) is the level-2 trans-bind function, analogous to (>>=)-> (|-*|) $ catchIOError x -- (|-*|) is a level-2 trans-cover function, analogous to (-*)+> (|-*|) $ check x -- (|-*|) is a level-2 trans-cover function, analogous to (-*) > >calc_program2 :: String -> IO (Maybe (Either IOException ())) >calc_program2 filename = runMaybeT . runExceptT $ program2 filename >->-- > calc_program "test.txt"+>-- > calc_program2 "test.txt" >-- Just (Left test.txt: openFile: does not exist (No such file or directory))->-- > calc_program ""+>-- > calc_program2 "" >-- Nothing -}
DeepControl/Monad/Trans/Identity.hs view
@@ -68,6 +68,9 @@ -- ** lift mapIdentityT5, liftCallCC5, liftCatch5, + -- * Example: identity-cover+ -- $Example+ ) where import DeepControl.Applicative@@ -192,7 +195,7 @@ (<*>) = lift2IdentityT3 (|*>>>) instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => Monad (IdentityT3 m1 m2 m3) where return = IdentityT3 . (.***)- m >>= f = IdentityT3 $ runIdentityT3 m >>>== (f >-> runIdentityT3)+ m >>= f = IdentityT3 $ runIdentityT3 m >>>= (f >-> runIdentityT3) instance (Alternative m1, Alternative m2, Alternative m3) => Alternative (IdentityT3 m1 m2 m3) where empty = IdentityT3 empty@@ -252,7 +255,7 @@ (<*>) = lift2IdentityT4 (|*>>>>) instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => Monad (IdentityT4 m1 m2 m3 m4) where return = IdentityT4 . (.****)- m >>= f = IdentityT4 $ runIdentityT4 m >>>>== (f >-> runIdentityT4)+ m >>= f = IdentityT4 $ runIdentityT4 m >>>>= (f >-> runIdentityT4) instance (Alternative m1, Alternative m2, Alternative m3, Alternative m4) => Alternative (IdentityT4 m1 m2 m3 m4) where empty = IdentityT4 empty@@ -330,7 +333,7 @@ (<*>) = lift2IdentityT5 (|*>>>>>) instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => Monad (IdentityT5 m1 m2 m3 m4 m5) where return = IdentityT5 . (.*****)- m >>= f = IdentityT5 $ runIdentityT5 m >>>>>== (f >-> runIdentityT5)+ m >>= f = IdentityT5 $ runIdentityT5 m >>>>>= (f >-> runIdentityT5) instance (Alternative m1, Alternative m2, Alternative m3, Alternative m4, Alternative m5) => Alternative (IdentityT5 m1 m2 m3 m4 m5) where empty = IdentityT5 empty@@ -431,7 +434,7 @@ (****-:) :: (Monad m1, Monad m2, Monad m3, Monad m4, Monad m5) => IdentityT m5 a -> IdentityT5 m1 m2 m3 m4 m5 a (****-:) = (---*-:) . (***-:) -{- $Example_Level2+{- $Example Here is an example showing how to use identity-cover functions >import DeepControl.Applicative ((|$>))
README.md view
@@ -4,7 +4,7 @@ ## Examples -### [Applicative](https://hackage.haskell.org/package/deepcontrol-0.5.1.0/docs/DeepControl-Applicative.html)+### [Applicative](https://hackage.haskell.org/package/deepcontrol-0.5.2.0/docs/DeepControl-Applicative.html) This module enables you to program in applicative style for more deeper level than the usual Applicative module expresses. You would soon realize exactly what more deeper level means by reading the example codes below in order.@@ -182,28 +182,7 @@ Work well likewise. -### [Traversable](https://hackage.haskell.org/package/deepcontrol-0.5.1.0/docs/DeepControl-Traversable.html)-- Prelude> :m DeepControl.Traversable--List, Maybe, Either, Except and Writer monads are all sinkable infinitely.-- > :t sink- sink :: (Applicative f, Traversable c) => c (f a) -> f (c a)-- > sink $ Just [1]- [Just 1]- > sink2 $ Just (Right [1])- Right [Just 1]-- > sink $ Right [Just 1]- [Right (Just 1)]- > sink2 $ Right [Just 1]- [Just (Right 1)]--So these monads can be deepened.--### [Monad](https://hackage.haskell.org/package/deepcontrol-0.5.1.0/docs/DeepControl-Monad.html)+### [Monad](https://hackage.haskell.org/package/deepcontrol-0.5.2.0/docs/DeepControl-Monad.html) This module enables you to program in Monad for more deeper level than the usual Monad module expresses. You would soon realize exactly what more deeper level means by reading the example codes below in order.@@ -223,6 +202,26 @@ -- 7 ``` +#### [Traversable](https://hackage.haskell.org/package/deepcontrol-0.5.2.0/docs/DeepControl-Traversable.html)++Identity, List, Maybe, Either, Except and Writer monads are sinkable monads.++ Prelude> :m DeepControl.Traversable+ > :t sink+ sink :: (Applicative f, Traversable c) => c (f a) -> f (c a) -- alias to 'sequenceA'++ > sink $ Just [1]+ [Just 1]+ > sink2 $ Just (Right [1])+ Right [Just 1]++ > sink $ Right [Just 1]+ [Right (Just 1)]+ > sink2 $ Right [Just 1]+ [Just (Right 1)]++So within these monads, deep level(layered) bind functions can be made.+ #### Level-2 ```haskell@@ -261,14 +260,14 @@ ```haskell import DeepControl.Applicative ((|$>>), (.*), (.**), (.***))-import DeepControl.Monad ((>>), (>>>==), (>--~), (-->~))+import DeepControl.Monad ((>>), (>>>=), (>--~), (-->~)) import Control.Monad.Writer factorial :: Int -> IO (Maybe (Writer [Int] Int)) -- IO-Maybe-Writer monad-factorial n | n < 0 = (.*) Nothing +factorial n | n < 0 = (.*) Nothing | n == 0 = (.**) $ tell [0] >> (.*) 1- | n > 0 = factorial (n-1) >>>== \v -> -- (>>>==) is the level-3 bind function, analogous to (>>=)+ | n > 0 = factorial (n-1) >>>= \v -> -- (>>>=) is the level-3 bind function, analogous to (>>=) print v >--~ -- (>--~) is a level-3 cover-sequence function, analogous to (>>) tell [v] -->~ -- (-->~) is a level-3 cover-sequence function too, analogous to (>>) (.***) (n * v)@@ -287,7 +286,7 @@ Work well likewise. -### [Monad-Transformer](https://hackage.haskell.org/package/deepcontrol-0.5.1.0/docs/DeepControl-Monad-Trans.html)+### [Monad-Transformer](https://hackage.haskell.org/package/deepcontrol-0.5.2.0/docs/DeepControl-Monad-Trans.html) #### Level-2 @@ -321,6 +320,7 @@ ackermann x y = do timelimit <- ask (|*|) . IdentityT2 $ ackermannTimeLimit timelimit x y -- lift IO-Maybe function to ReaderT-IdentityT2-IO-Maybe function+ -- (|*|) is the level-1 trans-cover function, alias to 'lift' and analogous to (.*) calc_ackermann :: TimeLimit -> Int -> Int -> IO (Maybe Int) calc_ackermann timelimit x y = ackermann x y >- \r -> runReaderT r timelimit@@ -332,6 +332,7 @@ ackermann' :: Int -> Int -> ReaderT TimeLimit (MaybeT IO) Int -- ReaderT-MaybeT-IO monad ackermann' x y = (transroll2 . runIdentityT2) |>| ackermann x y -- You can get usual ReaderT-MaybeT-IO function from ReaderT-IdentityT2-IO-Maybe function+ -- (|>|) is the level-1 trans-map function, analogous to (|$>) ackermann'' :: Int -> Int -> ReaderT TimeLimit (IdentityT2 IO Maybe) Int -- ReaderT-IdentityT2-IO-Maybe monad@@ -367,8 +368,34 @@ untransroll3 $ MaybeT (ListT (ExceptT (Identity (Right [Just 1])))) :: Num a => ExceptT e Identity [Maybe a] -### [Monad-Morph](https://hackage.haskell.org/package/deepcontrol-0.5.1.0/docs/DeepControl-Monad-Morph.html)+### [Monad-Morph](https://hackage.haskell.org/package/deepcontrol-0.5.2.0/docs/DeepControl-Monad-Morph.html) +#### SinkT++IdentityT, ListT, MaybeT, ExceptT and WriterT monadtrans' are sinkable.++ Prelude> :m DeepControl.Monad.Morph+ > :t sinkT+ sinkT+ :: (Monad m, Traversable x,+ DeepControl.Monad.Trans.MonadTrans_ x t, MMonad t, SinkT s) =>+ s (t m) a -> t (s m) a++ > :m + Control.Monad.Trans.List Control.Monad.Trans.Maybe+ > :m + DeepControl.Monad.Trans.Identity DeepControl.Monad.Trans.Except DeepControl.Monad.Trans.Writer++ > sinkT $ MaybeT (ListT (Right [Just 1]))+ ListT (MaybeT (Right (Just [1])))+ > sinkT $ MaybeT (ListT (ExceptT (Identity (Right [Just 1]))))+ ListT (MaybeT (ExceptT (Identity (Right (Just [1])))))++ > sinkT2 $ MaybeT (ListT (ExceptT (Identity (Right [Just 1]))))+ ListT (ExceptT (MaybeT (Identity (Just (Right [1])))))++So within these monadtrans', deep level(layered) trans-bind functions can be made.++#### Level-2+ Here is a monad morph example how to use trans-map functions. ```haskell@@ -380,10 +407,10 @@ tick :: State Int () tick = modify (+1) -tock :: StateT Int IO ()+tock :: StateT Int IO () tock = do- generalize |>| tick :: (Monad m) => StateT Int m () -- (|>|) is the level-1 trans-map function, analogous to (|$>)- lift $ putStrLn "Tock!" :: (MonadTrans t) => t IO ()+ generalize |>| tick :: (Monad m) => StateT Int m () -- (|>|) is the level-1 trans-map function, analogous to (|$>)+ (|*|) $ putStrLn "Tock!" :: (MonadTrans t) => t IO () -- λ> runStateT tock 0 -- Tock!@@ -393,11 +420,11 @@ save :: StateT Int (Writer [Int]) () save = do n <- get- lift $ tell [n]+ (|*|) $ tell [n] program :: StateT Int (WriterT [Int] IO) () program = replicateM_ 4 $ do- lift |>| tock+ (|*|) |>| tock :: (MonadTrans t) => StateT Int (t IO) () generalize |>>| save -- (|>>|) is the level-2 trans-map function, analogous to (|$>>) :: (Monad m) => StateT Int (WriterT [Int] m ) ()@@ -422,9 +449,9 @@ ----------------------------------------------- -- Level-1 -catchIOError :: IO a -> - ExceptT IOException IO a -- ExceptT-IO monad-catchIOError io = ExceptT $ (try io)+check :: IO a -> + ExceptT IOException IO a -- ExceptT-IO monad+check io = ExceptT $ (try io) viewFile :: IO () -- IO monad viewFile = do@@ -432,7 +459,7 @@ putStr str program :: ExceptT IOException IO () -- ExceptT-IO monad-program = (|*|) viewFile |>= catchIOError -- (|*|) is the level-1 trans-cover function, alias to 'lift' and analogous to (.*)+program = (|*|) viewFile |>= check -- (|*|) is the level-1 trans-cover function, alias to 'lift' and analogous to (.*) -- (|>=) is the level-1 trans-bind function, analogous to (>>=) calc_program :: IO (Either IOException ())@@ -448,21 +475,21 @@ MaybeT IO () -- MaybeT-IO monad viewFile2 filename = do guard (filename /= "")- str <- (|*|) $ readFile "test.txt"+ str <- (|*|) $ readFile filename (|*|) $ putStr str program2 :: String -> (ExceptT IOException (MaybeT IO)) () -- ExceptT-MaybeT-IO monad program2 filename = (|*|) (viewFile2 filename) |>>= \x -> -- (|>>=) is the level-2 trans-bind function, analogous to (>>=)- (|-*|) $ catchIOError x -- (|-*|) is a level-2 trans-cover function, analogous to (-*)+ (|-*|) $ check x -- (|-*|) is a level-2 trans-cover function, analogous to (-*) calc_program2 :: String -> IO (Maybe (Either IOException ())) calc_program2 filename = runMaybeT . runExceptT $ program2 filename --- > calc_program "test.txt"+-- > calc_program2 "test.txt" -- Just (Left test.txt: openFile: does not exist (No such file or directory))--- > calc_program ""+-- > calc_program2 "" -- Nothing ``` @@ -470,4 +497,4 @@ Work well likewise. -### [Arrow](https://hackage.haskell.org/package/deepcontrol-0.5.1.0/docs/DeepControl-Arrow.html)+### [Arrow](https://hackage.haskell.org/package/deepcontrol-0.5.2.0/docs/DeepControl-Arrow.html)
deepcontrol.cabal view
@@ -1,7 +1,7 @@ name: deepcontrol-version: 0.5.1.0+version: 0.5.2.0 synopsis: Provide more deeper level style of programming than the usual Control.xxx modules express-description: This module enables more deeper level style of programming than the usual Control.xxx modules express, especially for Applicative and Monad.+description: This module provides more deeper level style of programming than the usual Control.xxx modules express, especially for Applicative and Monad. license: BSD3 license-file: LICENSE author: KONISHI Yohsuke@@ -10,7 +10,7 @@ copyright: (c) 2015 KONISHI Yohsuke category: Control build-type: Simple--- extra-source-files: +-- extra-source-files: cabal-version: >=1.10 extra-source-files: README.md @@ -31,7 +31,7 @@ , DeepControl.Monad.Signatures , DeepControl.Monad.Trans , DeepControl.Monad.Trans.Identity- -- other-modules: + -- other-modules: other-extensions: MultiParamTypeClasses , FlexibleInstances , UndecidableInstances@@ -45,7 +45,7 @@ , mtl >=2.2 , mmorph >= 1.0 , transformers >=0.4- --hs-source-dirs: + --hs-source-dirs: default-language: Haskell2010 --Ghc-Options: -Wall -O2 @@ -168,4 +168,3 @@ , HUnit >= 1.3.0 , mtl, transformers , deepcontrol-
test/unit_Monad-factorial.hs view
@@ -9,7 +9,7 @@ factorial n | n < 0 = Nothing | n == 0 = (.*) $ tell [0] >> (.*) 1 | n > 0 = factorial (n-1) >>== \v -> - tell [v] ->~ -- (->~) is a level-2 bind-cover function, analogous for (>>)+ tell [v] ->~ -- (->~) is a level-2 bind-cover function, analogous to (>>) (.**) (n * v) -- > runWriter |$> factorial 5
test/unit_Monad-factorial2.hs view
@@ -1,16 +1,16 @@ import Test.HUnit hiding (State) import DeepControl.Applicative ((|$>>), (.*), (.**), (.***))-import DeepControl.Monad ((>>), (>>>==), (>--~), (-->~))+import DeepControl.Monad ((>>), (>>>=), (>--~), (-->~)) import Control.Monad.Writer factorial :: Int -> IO (Maybe (Writer [Int] Int)) -- IO-Maybe-Writer monad factorial n | n < 0 = (.*) Nothing | n == 0 = (.**) $ tell [0] >> (.*) 1- | n > 0 = factorial (n-1) >>>== \v -> -- (>>>==) is the level-3 bind function, analogous for (>>=)- print v >--~ -- (>--~) is a level-3 bind-cover function, analogous for (>>)- tell [v] -->~ -- (-->~) is a level-3 bind-cover function too, analogous for (>>)+ | n > 0 = factorial (n-1) >>>= \v -> -- (>>>=) is the level-3 bind function, analogous to (>>=)+ print v >--~ -- (>--~) is a level-3 bind-cover function, analogous to (>>)+ tell [v] -->~ -- (-->~) is a level-3 bind-cover function too, analogous to (>>) (.***) (n * v) -- > runWriter |$>> factorial 5
test/unit_Monad.hs view
@@ -46,13 +46,13 @@ ] tLevel3 = ("Level3" ~:) |$> [- ([[[1]]] >>>== \x -> (.***) x) ~?= [[[1]]]- , ((Just [[1]]) >>>== \x -> (.***) x) ~?= Just [[1]]- , (([Just [1]]) >>>== \x -> (.***) x) ~?= [Just [1]]- , (Right (Just [1]) >>>== \x -> (.***) x) ~?= (Right (Just [1]) :: Either () (Maybe [Int]))+ ([[[1]]] >>>= \x -> (.***) x) ~?= [[[1]]]+ , ((Just [[1]]) >>>= \x -> (.***) x) ~?= Just [[1]]+ , (([Just [1]]) >>>= \x -> (.***) x) ~?= [Just [1]]+ , (Right (Just [1]) >>>= \x -> (.***) x) ~?= (Right (Just [1]) :: Either () (Maybe [Int])) - , (Right (Just [0]) >>>== \x -> (.***) (x+1) >>>== \x -> (.***) (x+2)) ~?= (Right (Just [3]) :: Either () (Maybe [Int]))- , (Right Nothing >>>== \x -> (.***) (x+1) >>>== \x -> (.***) (x+2)) ~?= (Right Nothing :: Either () (Maybe [Int]))+ , (Right (Just [0]) >>>= \x -> (.***) (x+1) >>>= \x -> (.***) (x+2)) ~?= (Right (Just [3]) :: Either () (Maybe [Int]))+ , (Right Nothing >>>= \x -> (.***) (x+1) >>>= \x -> (.***) (x+2)) ~?= (Right Nothing :: Either () (Maybe [Int])) ] tests_Level0 :: Test@@ -68,14 +68,14 @@ tests_Level2 :: Test tests_Level2 = test [ - "List-List" ~: "(>>==)" ~: do+ "List-List" ~: "(>>=)" ~: do let actual :: [[String]] actual = [["a","b"]] >>== \x -> [[0],[1,2]] >>== \y -> (.**) $ x ++ show y actual @?= [["a0","b0"],["a0","b1","b2"],["a1","a2","b0"],["a1","a2","b1","b2"]] - , "List-Maybe" ~: "(>>==), (>>~)" ~: do+ , "List-Maybe" ~: "(>>=), (>>~)" ~: do let actual :: [Maybe Double] actual = (readMay |$> ["1", "2", "_"]) >>== \a -> (readMay |$> ["0", "2"]) >>== \b ->@@ -90,13 +90,13 @@ (.**) $ a / b actual @?= [Just 0.5,Just 1.0,Nothing] - , "(->)-Maybe" ~: "(>-==)" ~: do+ , "(->)-Maybe" ~: "(>-=)" ~: do let lengthM :: [Int] -> Maybe Int lengthM [] = Nothing lengthM xs = Just (length xs) averageM :: [Int] -> Maybe Double averageM = - sum >-== \s ->+ sum >-= \s -> lengthM >>== \l -> (.**) $ fromIntegral s / fromIntegral l averageM [10, 25, 70] @?= Just 35.0@@ -110,7 +110,7 @@ xs -> Just (length xs) averageRM :: Reader [Int] (Maybe Double) averageRM = - sumR >-== \s ->+ sumR >-= \s -> lengthRM >>== \l -> (.**) $ fromIntegral s / fromIntegral l runReader averageRM [10, 25, 70] @?= Just 35.0@@ -129,11 +129,11 @@ tests_Level3 :: Test tests_Level3 = test [ - "IO-Maybe-Writer" ~: "(>>>==), (-->~), (*-*)" ~: do+ "IO-Maybe-Writer" ~: "(>>>=), (-->~), (*-*)" ~: do let factorial :: Int -> IO (Maybe (Writer [Int] Int)) factorial n | n < 0 = (*-*) Nothing | n == 0 = (.**) $ tell [0] >> return 1- | n > 0 = factorial (n-1) >>>== \v ->+ | n > 0 = factorial (n-1) >>>= \v -> print v >--~ tell [v] -->~ (.***) (n * v)
test/unit_MonadMorph-bind.hs view
@@ -3,15 +3,15 @@ import DeepControl.Monad.Morph ((|>=), (|>>=), (|*|), (|-*|)) import DeepControl.Monad.Trans.Except -import Control.Exception (IOException, try) import Control.Monad.Trans.Maybe+import Control.Exception (IOException, try) ----------------------------------------------- -- Level-1 -catchIOError :: IO a -> +check :: IO a -> ExceptT IOException IO a -- ExceptT-IO monad-catchIOError io = ExceptT $ (try io)+check io = ExceptT $ (try io) viewFile :: IO () -- IO monad viewFile = do@@ -19,7 +19,7 @@ putStr str program :: ExceptT IOException IO () -- ExceptT-IO monad-program = (|*|) viewFile |>= catchIOError -- (|*|) is the level-1 trans-cover function, alias to 'lift', analogous to (.*)+program = (|*|) viewFile |>= check -- (|*|) is the level-1 trans-cover function, alias to 'lift', analogous to (.*) -- (|>=) is the level-1 trans-bind function, analogous to (>>=) calc_program :: IO (Either IOException ())@@ -35,21 +35,21 @@ MaybeT IO () -- MaybeT-IO monad viewFile2 filename = do guard (filename /= "")- str <- (|*|) $ readFile "test.txt" + str <- (|*|) $ readFile filename (|*|) $ putStr str program2 :: String -> (ExceptT IOException (MaybeT IO)) () -- ExceptT-MaybeT-IO monad program2 filename = (|*|) (viewFile2 filename) |>>= \x -> -- (|>>=) is the level-2 trans-bind function, analogous to (>>=)- (|-*|) $ catchIOError x -- (|-*|) is a level-2 trans-cover function, analogous to (-*)+ (|-*|) $ check x -- (|-*|) is a level-2 trans-cover function, analogous to (-*) calc_program2 :: String -> IO (Maybe (Either IOException ())) calc_program2 filename = runMaybeT . runExceptT $ program2 filename --- > calc_program "test.txt"+-- > calc_program2 "test.txt" -- Just (Left test.txt: openFile: does not exist (No such file or directory))--- > calc_program ""+-- > calc_program2 "" -- Nothing ------------------------------------------------------
test/unit_MonadMorph.hs view
@@ -8,10 +8,10 @@ tick :: State Int () tick = modify (+1) -tock :: StateT Int IO ()+tock :: StateT Int IO () tock = do- generalize |>| tick :: (Monad m) => StateT Int m () -- (|>|) is the level-1 trans-map function, analogous for (|$>)- lift $ putStrLn "Tock!" :: (MonadTrans t) => t IO ()+ generalize |>| tick :: (Monad m) => StateT Int m () -- (|>|) is the level-1 trans-map function, analogous to (|$>)+ (|*|) $ putStrLn "Tock!" :: (MonadTrans t) => t IO () -- λ> runStateT tock 0 -- Tock!@@ -21,13 +21,13 @@ save :: StateT Int (Writer [Int]) () save = do n <- get- lift $ tell [n]+ (|*|) $ tell [n] program :: StateT Int (WriterT [Int] IO) () program = replicateM_ 4 $ do- lift |>| tock+ (|*|) |>| tock :: (MonadTrans t) => StateT Int (t IO) ()- generalize |>>| save -- (|>>|) is the level-2 trans-map function, analogous for (|$>>)+ generalize |>>| save -- (|>>|) is the level-2 trans-map function, analogous to (|$>>) :: (Monad m) => StateT Int (WriterT [Int] m ) () -- λ> execWriterT (runStateT program 0)