Вопросы по теме 'free-monad'

Какие монады могут быть выражены как Free над некоторым функтором?
документация для Free говорит: Ряд обычных монад возникает как свободные монады, Учитывая data Empty a , Free Empty изоморфна монаде Identity . Free Maybe можно использовать для моделирования парциальной монады, где...
1841 просмотров
schedule 30.03.2023

Классы проникновения стека монад со свободными / рабочими преобразователями монад?
Может ли существовать mtl-подобный механизм для преобразователей монад, созданных FreeT / ProgramT? Я понимаю историю следующим образом. Давным-давно был изобретен преобразователь монад. Потом люди начали складывать монадные преобразователи один...
600 просмотров

Как избежать переполнения стека при использовании бесплатной монады scalaz?
Раньше я думал, что часть цели реализации состояла в том, чтобы избежать этой самой проблемы, так что, может быть, я делаю что-то явно глупое? Вот код: // Stack overflow import scalaz._ sealed trait Command[T] case class Wait(ms: Long)...
378 просмотров
schedule 13.06.2022

Существует ли Codensity MonadPlus, который асимптотически оптимизирует последовательность операций MonadPlus?
Недавно возник вопрос о связи между DList ‹-> [] и Codensity ‹-> Free . Это заставило меня задуматься, а есть ли такое для MonadPlus . Монада Codensity улучшает асимптотическую производительность только для монадических операций, но не...
560 просмотров

Печать бесплатной монады
Можно преобразовать свободную монаду в любую другую монаду, но, учитывая значение типа Free f x , я хочу распечатать все дерево, а не отображать каждый узел AST, сгенерированный в какой-либо другой узел в другой монаде. Габриэль Гонсалес...
171 просмотров
schedule 22.04.2022

Стрелки, бесплатные монады и IO
Габриэль Гонсалес в своем сообщении в блоге описывает способ для очистки кода с помощью бесплатных монад. Допустим, у нас есть FreeMonadIO a , тогда мы можем написать разные интерпретаторы, например, один для целей тестирования, а другой для...
424 просмотров

Как присвоить значение из монады IO квалифицированному конструктору RankNType
(ОБНОВЛЕНО) Я создал интерфейс с помощью Free Monad для универсального хранилища данных. Я хочу поместить конкретный интерпретатор (:: DataStore a -> IO a), выбранный пользователем во время выполнения, в монаду состояния вместе с некоторой...
112 просмотров
schedule 24.03.2023

Оптимизация свободной монады
Если у меня есть значение a: Free[Op, A] , возможно ли «сгладить» структуру a так, чтобы два Op , связанных вместе свободной монадой, могли быть объединены в один? Контекст: я хотел бы выполнить это как шаг оптимизации перед интерпретацией,...
302 просмотров

Scala Free Monads с Coproduct и преобразователем монад
Я пытаюсь начать использовать бесплатные монады в своем проекте, и мне трудно сделать его элегантным. Допустим, у меня есть два контекста (на самом деле у меня их больше) - Receipt и User - оба имеют операции с базой данных и Я хотел бы, чтобы...
480 просмотров

Определение интерпретатора для свободной монады
В пакете purescript-free есть пример кода, определяющий этот интерпретатор: teletypeN :: forall eff. NaturalTransformation TeletypeF (Eff (console :: CONSOLE | eff)) teletypeN (PutStrLn s a) = const a <$> log s teletypeN (GetLine k) = pure...
147 просмотров
schedule 23.12.2022

какова связь между Haskell FreeT и типом Coroutine
В статье «Конвейеры сопрограмм» в Monad.Reader Issue 19 автор определяет универсальный тип Coroutine : newtype Coroutine f m a = Coroutine { resume :: m (Either (f (Coroutine f m a)) a) } Я заметил, что этот тип очень похож на версию...
513 просмотров

Freer-Simple Freer Monads Как унифицировать обработку исключений ввода-вывода с эффектом ошибки
Я использую freer-simple для написания очень простого DSL. Все, что он делает, это читает файл. У меня есть одно правило относительно имен файлов, они не могут содержать букву x. Любая попытка открыть файл с буквой x приведет к ошибке: Left...
213 просмотров
schedule 11.01.2023

Архивирование бесплатных монадных трансформаторов
Пакет streaming предлагает функцию zipsWith zipsWith :: (Monad m, Functor h) => (forall x y. f x -> g y -> h (x, y)) -> Stream f m r -> Stream g m r -> Stream h m r и немного более обтекаемая версия,...
458 просмотров
schedule 04.01.2023

Являются ли свободные монады также быстро применимыми?
Мне кажется, я придумал интересный "быстрый" экземпляр Applicative для Free . data FreeMonad f a = Free (f (FreeMonad f a)) | Return a instance Functor f => Functor (FreeMonad f) where fmap f (Return x) = Return (f...
724 просмотров
schedule 11.06.2024

Реализация лексера с помощью Free Monad
Я думаю о случае использования бесплатной монады , которая была бы простым лексическим DSL. Пока я придумал несколько примитивных операций: data LexF r where POP :: (Char -> r) -> LexF r PEEK :: (Char -> r) -> LexF r FAIL ::...
69 просмотров
schedule 13.11.2022