Публикации по теме 'monad-transformers'
Monad Transformers для работающего программиста
Практическое введение в Monad Transformers, с подходом от проблемы к решению.
Итак, вы садитесь за свой стол, пьете кофе и готовитесь написать еще немного кода Scala. Функциональное программирование не так страшно, как вы думали, жизнь хороша, вы напрягаете мышцы и мозг и начинаете набрасывать ту новую функцию, которую вам нужно реализовать на этой неделе.
Это такой же день, как и многие другие: какие-то великолепные одинарные подсказки (ура, Scala!), Какие-то странные ошибки (о, нет,..
Вопросы по теме 'monad-transformers'
Объединение монад StateT и State
Допустим, у меня есть функция
f :: State [Int] Int
и функция:
g :: StateT [Int] IO Int
Я хочу использовать f в g и передавать состояние между ними. Есть ли библиотечная функция для StateT (return . runState f) ? Или вообще,...
1926 просмотров
schedule
12.07.2022
Аппликативы составляют, а монады - нет
Аппликативы составляют, а монады - нет.
Что означает вышеприведенное утверждение? А когда одно предпочтительнее другого?
13422 просмотров
schedule
11.12.2022
Монады Haskell и ошибка, не требующая строки
У меня есть следующий монадный преобразователь для работы с ошибками в Haskell.
instance (Monad m, Error e) => Monad (EitherT e m) where
return = EitherT . return . return
m >>= k = EitherT $ do
a <- runEitherT m...
254 просмотров
schedule
16.02.2024
Различные взаимодействующие уровни состояния в haskell
Я эмулирую 4-битный микропроцессор. Мне нужно отслеживать регистры, память и текущий вывод (бонусные баллы за наличие счетчика циклов выборки-выполнения). Мне удалось сделать это без монад, но это кажется грязным, когда я явно пропускаю столько...
491 просмотров
schedule
04.06.2023
Как правильно конвертировать между списками и преобразователями монад ListT?
В настоящее время я пишу проект, в котором я активно использую ListT монадный преобразователь. При использовании простых списков реализовать недетерминизм очень просто. Однако как только мне пришлось преобразовать мой код в ListT , все стало...
618 просмотров
schedule
07.06.2023
Почему в Haskell нет преобразователя ввода-вывода?
Каждая другая монада поставляется с версией преобразователя, и, насколько я знаю, идея преобразователя является общим расширением монад. Следуя тому, как строятся другие трансформаторы, IOT будет что-то вроде
newtype IOT m a = IOT { runIOT :: m...
4346 просмотров
schedule
07.03.2023
При использовании EitherT [StateWithSomeFixedStateType, T, U], как вы выполняете некоторые манипуляции с состоянием, когда возвращается левый?
Допустим, у вас есть EitherT, который выглядит примерно так:
type StateListOfString[+T] = State[List[String], T]
type MyEitherT = EitherT[StateListOfString, Int, Boolean]
Если у вас есть понимание, которое может вернуть left:
my...
132 просмотров
schedule
29.09.2022
Классы проникновения стека монад со свободными / рабочими преобразователями монад?
Может ли существовать mtl-подобный механизм для преобразователей монад, созданных FreeT / ProgramT?
Я понимаю историю следующим образом. Давным-давно был изобретен преобразователь монад. Потом люди начали складывать монадные преобразователи один...
600 просмотров
schedule
30.12.2022
Какой-то беспорядок с обертыванием/развертыванием/связыванием монад, связанный с контейнером, содержащим Maybe
Вот немного примера кода
foo :: a -> Identity (Maybe a)
foo a = do
maybeStuff <- getStuffSometimes a
return $ case maybeStuff of -- this "case" stuff is the kind
Just stuff -> Just $ getStuffAlways stuff -- of...
205 просмотров
schedule
11.05.2022
Трансформатор монад — явный подъем
Я читаю о преобразователях монад в Real World Haskell . В следующем примере стек Writer сверху State поверх Reader поверх IO .
{-# Language GeneralizedNewtypeDeriving #-}
import Control.Monad
import Control.Monad.State
import...
369 просмотров
schedule
16.03.2023
Как лучше всего использовать WriterT с Parsec?
Вопрос нуба по Haskell.
Я весело провел время, написав несколько парсеров как с Parsec, так и с AttoParsec. Теперь я хочу собрать информацию в процессе синтаксического анализа (по сути, построить таблицу символов), и использование преобразователя...
325 просмотров
schedule
18.12.2023
Как добавить монаду Reader в монаду Скотти?
Я пытаюсь использовать Скотти для создания очень простого API. Я хотел бы расширить монады Скотти, чтобы мои действия обработчика маршрута могли получить доступ к неизменной среде. Я считаю, что это можно сделать, добавив в стек монаду Reader ....
789 просмотров
schedule
10.04.2022
Как сохранить информацию при сбое?
Я пишу код, который использует монадный преобразователь StateT для отслеживания некоторой информации о состоянии (логирование и т. д.).
Монада, которую я передаю StateT , очень проста:
data CheckerError a = Bad {errorMessage :: Log} | Good...
139 просмотров
schedule
13.07.2023
Скотти использует MongoDB
Я относительно новичок в Haskell, и я впервые работаю с преобразователями монад. Я был бы очень признателен за помощь.
runQuery :: Pipe -> Query -> ActionM (Either Failure [Document])
runQuery pipe query = access pipe master "nutrition"...
1075 просмотров
schedule
19.10.2022
StateT с монадой Q из шаблона haskell
Я хотел бы создать функцию, которая принимает некоторые объявления типа Dec (которые я получаю от [d| ... |]) и модифицирую их. Модификации будут зависеть от предыдущих объявлений, поэтому я хотел бы иметь возможность хранить их в карте, скрытой в...
296 просмотров
schedule
07.06.2023
Поймать SomeException с помощью ExceptT
Я пытаюсь использовать монадный преобразователь ExceptT для перехвата любого исключения, выдаваемого функцией, например так:
import Control.Exception
import Control.Monad.Trans.Except
badFunction :: ExceptT SomeException IO ()
badFunction =...
1478 просмотров
schedule
16.07.2022
Пользовательский экземпляр MonadState
Когда я делаю:
cabal sandbox init
cabal update
cabal install hakaru
cabal repl
λ> :l simple.hs
λ> sample test []
с simple.hs , содержащим:
{-# LANGUAGE MultiParamTypeClasses #-}
import Language.Hakaru.ImportanceSampler
import...
362 просмотров
schedule
05.08.2022
MonadBaseControl: как поднять simpleHTTP из Happstack?
Как использовать MonadBaseControl из monad-control для поднятия simpleHTTP , определенная в happstack-server ?
Текущий тип simpleHTTP :
simpleHTTP :: ToMessage a
=> Conf -> ServerPartT IO a -> IO ()...
112 просмотров
schedule
07.06.2022
Почему ContT не работает с внутренней монадой?
Стратегия связывания для ContT игнорирует внутреннюю монаду, фактически код такой же, как для Cont .
Следуя аналогии с другими преобразователями монад, я бы реализовал это так:
return x = ContT ($ (return x))
(>>=) x f = ContT (\k...
319 просмотров
schedule
12.07.2022
Типы в вычислениях MaybeT
Работая над вычислением ввода-вывода, я получил лестницу из case mbValue of … s и понял, что для упрощения кода мне следует использовать монаду Maybe . Так как это внутри вычисления IO и мне нужно получить IO значений, я использовал...
351 просмотров
schedule
03.01.2024