TA
И это как-то так:
class Comonad m where
coreturn :: m a -> a
cobind :: m a -> (m a -> b) -> m b
Так что это вывернутая комонада)
Хотя нет,это скорее КонтрКоМонада)
Но это уже вообще теряет всякий смысл ...
Это все слишком абстрактно, хотя...
В теории обобщением может быть такой класс:
class (Category f)=>AllMonad f m where
return :: f a a
return = id
bind :: f a b -> (m a -> m b)
И как это использовать, вообще непонятно...
Но по крайней мере для этого класса можно сделать инстанс для клейсли...