Публикации по теме 'free-monad'


Объясните свободную монаду, как будто мне пять лет (часть 2)
В первой части этого поста мы говорили о том, как Free Monad может собрать монаду из Functor. Для этого вы можете создать программы, подобные DSL, и сгенерировать другую программу. Созданная вами программа становится простой структурой данных, представляющей логику предметной области. После того, как вы составили программу, вы можете соединить эти программы с интерпретатором. Вы можете переключить другой интерпретатор на dev и QA. Вы также можете абстрагироваться от реализации..

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

Control.MonadPlus.Free без лишней раздачи
Я пытаюсь использовать бесплатную монаду для создания EDSL для построения деревьев решений И/ИЛИ, таких как Пролог, с >>= , сопоставленным с И, и mplus , сопоставленным с ИЛИ. Я хочу иметь возможность описать что-то вроде A AND (B OR C) AND...
174 просмотров
schedule 25.07.2022

Аппликативный экземпляр для бесплатной монады
Пытаясь найти монаду haskell, которая может выполняться поэтапно / разрешает многопоточность, я обнаружил бесплатную монаду data Free f a = Return a | Roll (f (Free f a)) со своим экземпляром монады instance (Functor f) => Monad (Free...
952 просмотров
schedule 02.11.2022

Навигация и изменение AST, построенных на монаде Free в Haskell
Я пытаюсь структурировать AST, используя свободную монаду, основываясь на некоторой полезной литературе, которую я прочитал в Интернете. У меня есть несколько вопросов о работе с такими AST на практике, которые я свел к следующему примеру....
1630 просмотров

Синтаксические деревья: свободная монада + Bound.Scope
Я пытаюсь определить тип абстрактного синтаксиса, используя библиотеки ekmett bound и free . У меня есть что-то работающее, что я могу разобрать до следующего минимального примера: {-# LANGUAGE DeriveFunctor #-} import Bound import...
183 просмотров

Хорошая печать с бесплатными монадами и GADT
Рассмотрим функтор выражения, определенный следующим GADT: {-# LANGUAGE GADTs #-} {-# LANGUAGE KindSignatures #-} import Control.Monad.Free data ExprF :: * -> * where Term :: Foo a -> (a -> r) -> ExprF r instance Functor ExprF...
470 просмотров
schedule 02.05.2022

Как использовать кодировку Church для Free Monads?
Я использовал тип данных Free в Control.Monad.Free из пакета free . Теперь я пытаюсь преобразовать его для использования F в Control.Monad.Free.Church , но не могу понять, как сопоставить функции. Например, простая функция сопоставления с...
1347 просмотров

Полиморфная инструкция Free Monad в Purescript
Я пытаюсь скомпилировать этот небольшой фрагмент кода. module Sodium where import Prelude import Control.Monad.Free import Data.Coyoneda import Data.Tuple data ReactiveF more = RFNewEvent (forall a. (Tuple (Event a) (a -> Reactive Unit)...
210 просмотров
schedule 24.03.2022

Авто, стрелки и свободные монады
Я прочитал две замечательные серии статей о автомобилях. и бесплатные монады и я хотел бы как-то совместить эти две техники. Я хотел бы иметь что-то вроде: data ProgramF a = Get (String -> a) | Set String a instance Functor ProgramF...
259 просмотров

Являются ли свободные монады числами Чёрча?
Комментатор недавно заявил : Свободные монады — это числа Чёрча — просто использующие (эндо-) функторы вместо функций! Он продолжает объяснять это , говоря: они оба являются эндофункцией (ионом | или), составленной 0 - n раз...
92 просмотров
schedule 28.06.2022

Бесплатная монада и бесплатная работа
Один из способов описать свободную монаду - сказать, что это начальный моноид в категории эндофункторов (некоторой категории C ), объекты которых являются эндофункторами от C до C , стрелки - это естественные преобразования между ними. . Если...
245 просмотров

Бесплатная реализация в scalaz
Бесплатная реализация на Haskell: data Free f a = Pure a | Free (f (Free f a)) тогда как реализация в Scalaz: sealed abstract class Free[S[_], A] private case class Return[S[_], A](a: A) extends Free[S, A] private case class...
181 просмотров
schedule 16.05.2022

Как в Haskell встроить одну монаду Free в другую?
У меня есть две бесплатные монады для разных операций в разных контекстах. Однако один ( major ) DSL должен содержать другой ( action ), если конкретная операция находится в контексте: import Control.Monad.Free data ActionFunctor next = Wait...
152 просмотров
schedule 15.06.2022

Пример бесплатной расширяющей игрушки монады
Я пытаюсь расширить игрушечный пример, описанный в этом блоге. сообщение . {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE FlexibleContexts #-} module FreeToy where import Control.Monad.State import Control.Monad.Free import Data.Map (Map) import...
115 просмотров
schedule 10.09.2023

Почему компилятор не может вывести тип Functor в примерах Free Applicative?
module Main where data Toy b next = Output b next | Bell next | Done data FixE f e = Fix (f (FixE f e)) | Throw e -- The working monadic function catch :: (Functor f) => FixE f e1 -> (e1 -> FixE f e2) -> FixE f e2 catch (Fix x)...
215 просмотров
schedule 30.09.2023

Внедрение индексированного функтора в копроизведение функтора
Пытаюсь работать с индексированной бесплатной монадой (у Олега Киселева есть вступление ). Я также хочу, чтобы эта свободная монада была построена из побочного продукта функторов а-ля Типы данных по выбору . Тем не менее, у меня возникли проблемы...
984 просмотров
schedule 30.07.2023

Преобразование Doobie ConnectionIO[Option[Int]] без явного соответствия
У меня есть ConnectionIO[Option[Int]] и сопоставление с Option для создания ConnectionIO[Option[String]] с запросом Some[Int] , в противном случае сохраните Nones. I was able to do this with a for comprehension and a match`: def...
596 просмотров
schedule 05.01.2023

Составление алгебр на основе Cats Free Monad
Предположим, у меня есть следующая алгебра для работы с файловой системой: sealed trait Fs[A] case class Ls(path: String) extends Fs[Seq[String]] case class Cp(from: String, to: String) extends Fs[Unit] def ls(path: String) =...
174 просмотров
schedule 01.05.2022

Являются ли бесплатные монады просто монадами с интерфейсами?
Я читал кое-что материалы в бесплатных монадах и я действительно не думаю, что я намного ближе к реализации, но я думаю, что я ближе к пониманию того, что они из себя представляют! Учитывая множество вышеупомянутых ресурсов, я понимаю, что...
836 просмотров
schedule 10.08.2022

Как сделать бесплатный интерпретатор монад рекурсивным?
В бесплатном интерпретаторе монад используя iterT , я хотел бы иметь внутреннее состояние, но я не уверен, как это сделать, так как функция iterT предоставляет продолжение, f предварительно загруженное рекурсивным вызовом, насколько я понимаю....
145 просмотров