Вопросы по теме 'free-monad'
Какие монады могут быть выражены как Free над некоторым функтором?
документация для Free говорит:
Ряд обычных монад возникает как свободные монады,
Учитывая data Empty a , Free Empty изоморфна монаде Identity .
Free Maybe можно использовать для моделирования парциальной монады, где...
1841 просмотров
schedule
30.03.2023
Классы проникновения стека монад со свободными / рабочими преобразователями монад?
Может ли существовать mtl-подобный механизм для преобразователей монад, созданных FreeT / ProgramT?
Я понимаю историю следующим образом. Давным-давно был изобретен преобразователь монад. Потом люди начали складывать монадные преобразователи один...
600 просмотров
schedule
30.12.2022
Как избежать переполнения стека при использовании бесплатной монады 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 просмотров
schedule
04.05.2022
Печать бесплатной монады
Можно преобразовать свободную монаду в любую другую монаду, но, учитывая значение типа Free f x , я хочу распечатать все дерево, а не отображать каждый узел AST, сгенерированный в какой-либо другой узел в другой монаде.
Габриэль Гонсалес...
171 просмотров
schedule
22.04.2022
Стрелки, бесплатные монады и IO
Габриэль Гонсалес в своем сообщении в блоге описывает способ для очистки кода с помощью бесплатных монад. Допустим, у нас есть FreeMonadIO a , тогда мы можем написать разные интерпретаторы, например, один для целей тестирования, а другой для...
424 просмотров
schedule
19.06.2023
Как присвоить значение из монады IO квалифицированному конструктору RankNType
(ОБНОВЛЕНО)
Я создал интерфейс с помощью Free Monad для универсального хранилища данных. Я хочу поместить конкретный интерпретатор (:: DataStore a -> IO a), выбранный пользователем во время выполнения, в монаду состояния вместе с некоторой...
112 просмотров
schedule
24.03.2023
Оптимизация свободной монады
Если у меня есть значение a: Free[Op, A] , возможно ли «сгладить» структуру a так, чтобы два Op , связанных вместе свободной монадой, могли быть объединены в один?
Контекст: я хотел бы выполнить это как шаг оптимизации перед интерпретацией,...
302 просмотров
schedule
11.08.2022
Scala Free Monads с Coproduct и преобразователем монад
Я пытаюсь начать использовать бесплатные монады в своем проекте, и мне трудно сделать его элегантным. Допустим, у меня есть два контекста (на самом деле у меня их больше) - Receipt и User - оба имеют операции с базой данных и Я хотел бы, чтобы...
480 просмотров
schedule
06.05.2022
Определение интерпретатора для свободной монады
В пакете 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 просмотров
schedule
10.05.2023
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