Описание тега free-monad

Бесплатные монады дают общий способ превращения функторов в монады. Они полезны для многих древовидных структур и языков, специфичных для предметной области.
0 ответов

Как использовать Free с парами в fs2?

Допустим, я хочу прочитать данные из jms, отобразить их через toUpperCase и отправить в другое место. Поэтому я абстрагируюсь от реальной системы обмена сообщениями с Jms[A], право? trait Jms[A] case object Pull extends Jms[String] case class Push(s…
11 ноя '16 в 10:00
3 ответа

Условное поведение со свободными монадами

Я следую учебному пособию здесь: http://typelevel.org/cats/datatypes/freemonad.html и пытаюсь изменить его для работы с кешем перед хранилищем значений ключей. Это то, что я придумал до сих пор, но я получаю ошибку компилятора с valueGetOperation, Я…
15 янв '17 в 09:41
1 ответ

Есть ли инъекционный эквивалент для Haskell в контексте свободных монад

Я пытаюсь перевести это Скала cats пример о создании бесплатных монад. Суть этого примера заключается в разложении отдельных задач на отдельные типы данных: data Interact a = Ask (String -> a) | Tell String a deriving (Functor) data DataOp = AddC…
18 ноя '17 в 15:26
1 ответ

Изучение связующей структуры в свободной монаде АСТ

Возьмите этот простой базовый функтор и другие механизмы для бесплатной монады с обязательными условиями: {-# LANGUAGE DeriveFunctor #-} import Control.Monad.Free data ProgF r = FooF (Double -> r) | BarF Double (Int -> r) | EndF deriving Funct…
18 сен '15 в 04:24
1 ответ

Существует ли Coadsity MonadPlus, который асимптотически оптимизирует последовательность операций MonadPlus?

Недавно возник вопрос о связи между DList <-> [] против Codensity <-> Free, Это заставило меня задуматься, есть ли такая вещь для MonadPlus, Codensity Монада улучшает асимптотику только для монадических операций, а не для mplus, Более того, пока ран…
27 авг '15 в 14:35
1 ответ

Как использовать бесплатную монаду с Future[M[_]]

Я реализовал простой язык для процесса ETL, используя свободную монаду. Когда используешь List в качестве ввода и вывода для извлечения и хранения данных все работает нормально. Однако я использую асинхронные библиотеки и работаю с Future[List] общи…
1 ответ

Молния монадой трансформаторов

streaming пакет предлагает zipsWith функция zipsWith :: (Monad m, Functor h) =&gt; (forall x y. f x -&gt; g y -&gt; h (x, y)) -&gt; Stream f m r -&gt; Stream g m r -&gt; Stream h m r и немного более обтекаемая версия, zipsWith' :: Monad m =&gt; (for…
24 ноя '18 в 20:19
1 ответ

Free ~> Trampoline: рекурсивные сбои программы с OutOfMemoryError

Предположим, что я пытаюсь реализовать очень простой предметно-ориентированный язык только с одной операцией: printLine(line) Затем я хочу написать программу, которая принимает целое число n в качестве ввода печатает что-то, если n делится на 10k, а…
1 ответ

Как сравнить программу, указанную в качестве свободной монады, с описанием ожидаемых инструкций?

Так что я пытаюсь сделать что-то вроде романа (я думаю), но я не достаточно опытен в программировании на уровне типов на Хаскелле, чтобы решить это сам. У меня есть бесплатная монада, описывающая некоторые эффекты, которые нужно выполнить (AST, если…
19 сен '15 в 20:55
1 ответ

Использование бесплатной монады с любым

У меня есть два DSL - EmployeeAction а также ContactAction, Вот мои черты (Действия) Complete Gist: ссылка sealed trait EmployeeAction[R] case class GetEmployee(id: Long) extends EmployeeAction[Either[Error, Employee]] sealed trait ContactAction[R] …
2 ответа

Используйте нотацию "do" монады Haskell для определения синтаксического дерева

Я пытаюсь построить абстрактное синтаксическое дерево, которое позволяет определение с использованием монады do обозначение, как так: ast = do Variable uint8 "i" Function Void "f" $ do Variable uint8 "local_y" Comment "etc. etc." Конструкция, котору…
2 ответа

Применение семантики к свободным монадам

Я пытаюсь абстрагировать шаблон применения определенной семантики к свободной монаде над некоторым функтором. Пример, который я использую, чтобы мотивировать это, - применение обновлений к сущности в игре. Поэтому я импортирую несколько библиотек и …
1 ответ

Стрелка из Free и MonadFree

Как создать Arrow от Free а также MonadFree? class (Functor f, Monad m) =&gt; MonadFree f m where ... data Free f a = Impure (f (Free f a)) | Pure a MonadFree содержит 2 параметра m а также f, но Kleisli нет места для вставки fпоэтому мы не можем ис…
21 сен '13 в 11:39
1 ответ

Сложность с зумом и свободными монадами

Я возлюсь со свободными монадами и линзами, используя свободную монаду, чтобы создать свою собственную версию монады ввода / вывода: data MyIO next = LogMsg String next | GetInput (String -&gt; next) deriving (Functor) Я укладываю это поверх государ…
06 апр '15 в 19:41
1 ответ

Попытка получить привязку, работающую для комбинации State и Delayed monad

Если ответ на этот вопрос "ты все делаешь неправильно", непременно дай мне знать более правильный путь. У меня был код, который был структурирован так: type Res&lt;'T&gt; = | E of (DC -&gt; 'T) | V of 'T Теперь этот тип в основном использовался напр…
02 ноя '15 в 18:49
6 ответов

Монада Пауза

Монады могут делать много удивительных, безумных вещей. Они могут создавать переменные, которые содержат суперпозицию значений. Они могут позволить вам получить доступ к данным из будущего, прежде чем вы их вычислите. Они могут позволить вам писать …
2 ответа

Как реализовать Reader с помощью бесплатных монад?

Итак, я понял, как реализовать Reader (а также ReaderT (не показано) с помощью operational пакет: {-# LANGUAGE GADTs, ScopedTypeVariables #-} import Control.Monad.Operational data ReaderI r a where Ask :: ReaderI r r type Reader r a = Program (Reade…
15 мар '13 в 06:42
3 ответа

Возможно ли реализовать MonadFix для `Free`?

http://hackage.haskell.org/package/free in Control.Monad.Free.Free позволяет получить доступ к "свободной монаде" для любого данного Functor, Это, однако, не имеет MonadFix пример. Это потому, что такой экземпляр не может быть записан, или он был п…
31 янв '13 в 22:07
2 ответа

Бесплатная Monad для создания блога в Scala

Предположим, мне нужно добавить сгенерированный канал RSS/Atom для сайта блога. Я думаю о паттерне"Feed Monad Interpreter". То есть я бы определил DSL с примитивами Blog а также BlogPost, Free monad, которое является просто деревом этих примитивов, …
12 янв '15 в 15:07
1 ответ

Аппликативный экземпляр для бесплатной монады

Пытаясь найти монаду haskell, которая может быть выполнена пошагово / допускает многопоточность, я обнаружил свободную монаду data Free f a = Return a | Roll (f (Free f a)) с его монадой instance (Functor f) =&gt; Monad (Free f) where return = Retur…
01 мар '14 в 23:44