Подтвердить что ты не робот

Автоматический выбор переводчика через Free Monad and Coproduct

Я играю с архитектурой приложений и бесплатными монадами в 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.

4b9b3361

Ответ 1

Заполнение раздела ответа от комментариев к исходному вопросу...

Оригинальную бумагу Haskell можно найти здесь: Типы данных à la carte

Реализация Haskell можно найти здесь: ALaCarte.hs