module Control.Functor.Composition.Monad (Monad (..)) where import Control.Functor.Composition.Bindable (Bindable) import Control.Functor.Pointable (Pointable) {- | > Let f :: (Pointable t, Bindable t) => a -> t a > Let g :: (Pointable t, Bindable t) => a -> t a > Let h :: (Pointable t, Bindable t) => t a > When using this constraint, you should ensure it satisfies the three laws: > * Left identity: point a >>= f ≡ f a > * Right identity: h >>= point ≡ h > * Associativity: h >>= (\x -> f x >>= g) ≡ (h >>= f) >>= g -} type Monad t = (Pointable t, Bindable t)