semantics monad
class (Functor f, Monad m) => MonadSem f m | m -> f wheren lazily :: m a -> m (f a) force :: f a -> m a -- fmap (fmap f) . lazily = lazily . fmap f -- fmap lazily . lazily = lazily . lazily -- lazily . pure = pure . pure -- join . lazily = id