module ArrowTypes where newtype Kleisli m a b = Kleisli (a -> m b) newtype StateArrT s q a b = StateArrT (q (a,s) (b,s)) newtype MonadArrT m q a b = MonadArrT (m (q a b)) type ReaderArrT r = MonadArrT ((->) r) type StateArr s a b = StateArrT s (->) a b