foo :: MonadFoo m => m ()
foo = ...
bar :: MonadBar m => m ()
bar => ...
foobar :: (MonadFoo m, MonadBar m) => m ()
foobar = foo >> bar
Помню, уже был про это разговор. @graninas говорил, что прописывать констрейнты перед стрелочкой длинно и нелепо, а делать тайп-алиасы для пачек констрейнтов неудобно, потому что гранулярность теряется
А в чем ценность композирования эффектов?
Обсуждают сегодня