This is very much restricted to ordinary function types!class Monad m where
return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b
Let's see how this restriction can be lifted...
Since the semantics of gonads are already eminently taken, I settled for the name Geonad.class Category (~>) => Geonad (g (~>)) where
return :: a ~> g (~>) a
(>>=) :: g (~>) a ~> (a ~> g (~>) b) ~> g (~>) b
No idea whether this can produce something relevant for our lives :-)