Публикации по теме '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 просмотров

Аппликативы составляют, а монады - нет
Аппликативы составляют, а монады - нет. Что означает вышеприведенное утверждение? А когда одно предпочтительнее другого?
13422 просмотров

Монады 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 просмотров

Как правильно конвертировать между списками и преобразователями монад ListT?
В настоящее время я пишу проект, в котором я активно использую ListT монадный преобразователь. При использовании простых списков реализовать недетерминизм очень просто. Однако как только мне пришлось преобразовать мой код в ListT , все стало...
618 просмотров

Почему в 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 просмотров

Классы проникновения стека монад со свободными / рабочими преобразователями монад?
Может ли существовать mtl-подобный механизм для преобразователей монад, созданных FreeT / ProgramT? Я понимаю историю следующим образом. Давным-давно был изобретен преобразователь монад. Потом люди начали складывать монадные преобразователи один...
600 просмотров

Какой-то беспорядок с обертыванием/развертыванием/связыванием монад, связанный с контейнером, содержащим 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 просмотров

Как лучше всего использовать 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 просмотров

Скотти использует MongoDB
Я относительно новичок в Haskell, и я впервые работаю с преобразователями монад. Я был бы очень признателен за помощь. runQuery :: Pipe -> Query -> ActionM (Either Failure [Document]) runQuery pipe query = access pipe master "nutrition"...
1075 просмотров

StateT с монадой Q из шаблона haskell
Я хотел бы создать функцию, которая принимает некоторые объявления типа Dec (которые я получаю от [d| ... |]) и модифицирую их. Модификации будут зависеть от предыдущих объявлений, поэтому я хотел бы иметь возможность хранить их в карте, скрытой в...
296 просмотров

Поймать SomeException с помощью ExceptT
Я пытаюсь использовать монадный преобразователь ExceptT для перехвата любого исключения, выдаваемого функцией, например так: import Control.Exception import Control.Monad.Trans.Except badFunction :: ExceptT SomeException IO () badFunction =...
1478 просмотров

Пользовательский экземпляр 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 просмотров

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