0 | module Control.Monad.Restricted
2 | import Control.Applicative.Restricted
3 | import Data.Functor.Restricted
12 | interface RApplicative r m => RMonad (0 r : Type -> Type) (0 m : Type -> Type) where
13 | rjoin : (r x, r y) => m x -> (x -> m y) -> m y
16 | (>>=) : {0 m : Type -> Type} -> (RMonad r m) => (r x, r y) => m x -> (x -> m y) -> m y
20 | (=<<) : (RMonad r m) => (r x, r y) => (x -> m y) -> m x -> m y
24 | (<=<) : (RMonad r m) => (r x, r y, r z) => (y -> m z) -> (x -> m y) -> x -> m z
25 | (g <=< f) x = g =<< f x
28 | (>=>) : (RMonad r m) => (r x, r y, r z) => (x -> m y) -> (y -> m z) -> x -> m z