Я играю с архитектурой приложений и бесплатными монадами в haskell. У меня есть это, за исключением того, как поднять мою "инструкцию" в правильный слот моего копроизведения без явного указания полного пути "Влево/Вправо".
Вот пример haskell, с которым я работал: https://gist.github.com/aaronlevin/87465696ba6c554bc72b#file-reasonable-hs
Здесь, чтобы вводить типы в копродукт, мы явно указываем путь.
Например:
Program :: Coproduct Interaction (Coproduct Auth Logging) a
logC :: (Functor f) => (forall a. Logging a -> f a) -> String -> Free f ()
logger :: String -> Free Program ()
logger = logC (Program . Coproduct . Right . Coproduct . Right)
Здесь регистратор должен быть помещен в правый слот в сопроводительном документе вручную с помощью Coproduct . Right . Coproduct . Right
Рунарный разговор в scala использует неявные преобразования типов и класс ввода для достижения этого результата: https://gist.github.com/runarorama/a8fab38e473fafa0921d#file-gistfile1-scala-L119
Короче говоря, мне интересно, есть ли способ сделать это в haskell.