Публикации по теме '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 просмотров
schedule
23.03.2023
Синтаксические деревья: свободная монада + Bound.Scope
Я пытаюсь определить тип абстрактного синтаксиса, используя библиотеки ekmett bound и free . У меня есть что-то работающее, что я могу разобрать до следующего минимального примера:
{-# LANGUAGE DeriveFunctor #-}
import Bound
import...
183 просмотров
schedule
30.05.2023
Хорошая печать с бесплатными монадами и 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 просмотров
schedule
31.05.2022
Полиморфная инструкция 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 просмотров
schedule
08.10.2023
Являются ли свободные монады числами Чёрча?
Комментатор недавно заявил :
Свободные монады — это числа Чёрча — просто использующие (эндо-) функторы вместо функций!
Он продолжает объяснять это , говоря:
они оба являются эндофункцией (ионом | или), составленной 0 - n раз...
92 просмотров
schedule
28.06.2022
Бесплатная монада и бесплатная работа
Один из способов описать свободную монаду - сказать, что это начальный моноид в категории эндофункторов (некоторой категории C ), объекты которых являются эндофункторами от C до C , стрелки - это естественные преобразования между ними. . Если...
245 просмотров
schedule
17.12.2022
Бесплатная реализация в 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 просмотров
schedule
24.04.2023