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


Ката банка в Haskell — дата использования и тестирования
Резюме Последний пост мы смотрели на печать во время удержания состояния. Вот код, который у нас получился: Наша последняя задача для завершения ката — добавить дату к транзакциям. Мы реализуем это небольшими логическими шагами, используя компилятор и тесты для управления нашим дизайном. Давайте начнем! Изменить транзакцию, чтобы она содержала дату Это вызовет ошибку времени компиляции — deposit и withdraw больше не создают допустимый тип Transaction , как и наши..

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

неуклюжий стек трансформатора монад
Решение проблемы из Google Code Jam ( 2009.1AA: "Multi- базовое счастье " ) Я придумал неудобное (с точки зрения кода) решение, и мне интересно, как его можно улучшить. Краткое описание проблемы: найти наименьшее число больше 1, для которого...
2138 просмотров
schedule 23.04.2022

Стек преобразователя Haskell Monad и подписи типов
Я пытаюсь создать стек преобразователей монад, и у меня возникают проблемы с получением правильных сигнатур типов для моих функций. (Я все еще новичок в Haskell) Стек объединяет несколько преобразователей StateT, поскольку у меня есть несколько...
3221 просмотров

Использование MonadError с Parsec
Я пытаюсь использовать MonadError вместе с Parsec. Я придумал следующий фрагмент кода: f5 = do char 'a' throwError "SomeError" f6 = f5 `catchError` (\e -> unexpected $ "Got the error: " ++ e) ret = runErrorT (runParserT f6 () "stdin"...
1170 просмотров
schedule 04.08.2022

Типовая ошибка при попытке реализовать функцию (››=) для создания пользовательского преобразователя монад
Я пытаюсь создать монадный преобразователь для будущего проекта, но, к сожалению, моя реализация функции Monad typeclasse (>>=) не работает. Прежде всего, вот реализация базовой монады: newtype Runtime a = R { unR :: State EInfo a } deriving...
298 просмотров
schedule 06.07.2023

Советы по более элегантному коду с монадами?
Наконец-то я понял, как использовать монады (не знаю, понимаю ли я их...), но мой код никогда не бывает очень элегантным. Я предполагаю, что это из-за отсутствия понимания того, как все эти функции на Control.Monad могут реально помочь. Поэтому я...
1061 просмотров

Написание экземпляра liftIO для типа результата Text.JSON
Библиотека Haskell Text.JSON использует абстрактный тип данных под названием Result, в основном это их форма Maybe, но вместо Nothing есть Error String. В любом случае, мне нужно использовать liftIO для преобразования вызова функции, возвращающего...
555 просмотров
schedule 29.05.2023

Является ли/должно ли считаться плохой практикой перенос функций в монадный преобразователь?
Допустим, мы хотим использовать ReaderT [(a,b)] вместо монады Maybe , а затем мы хотим выполнить поиск в списке. Теперь простой и не слишком необычный способ: первая возможность find a = ReaderT (lookup a) Однако похоже, что это...
620 просмотров
schedule 19.07.2022

Haskell Best Practise: досрочное завершение в Haskeline
Я использую пакет Haskeline и хочу получить три строки подряд из командной строки. прежде чем я что-либо сделаю, и я придумал то, что кажется мне изящным решением. Но я уверен, что может быть лучший способ сделать это. Я ищу лучшие практики при...
538 просмотров
schedule 01.03.2023

Как сохранить древовидную структуру данных в двоичный файл в Haskell
I'm trying to save a simple (but quite big) Tree structure into a binary file using Haskell. The structure looks something like this: -- For simplicity assume each Node has only 4 childs data Tree = Node [Tree] | Leaf [Int] And here is how I need...
2124 просмотров

Есть ли функция replicateM для внутренней монады в преобразователе монад?
Предположим, у меня есть что-то вроде этого: data Environment = ... data MyState = ... data Report = ... updateState :: Environment -> MyState -> MyState updateState = ... report :: MyState -> Report report = ... foo :: ReaderT...
734 просмотров
schedule 29.04.2022

monads-tf: экземпляр MonadReader для MonadState
Рассмотрим следующий пример. У меня есть монада MyM , которая является просто StateT {-# LANGUAGE TypeFamilies #-} import Control.Monad.State import Control.Monad.Reader type MyS = Int type MyM = StateT MyS Обычно MyM используется для...
652 просмотров

scalaz List[StateT].sequence — не удалось найти неявное значение для параметра n: scalaz.Applicative
Я пытаюсь понять, как использовать StateT для объединения двух преобразователей состояния State на основе комментария к моему Примеры монад состояния Scalaz answer. Кажется, я очень близок, но у меня возникла проблема при попытке применить...
1359 просмотров

Как внедрить значение Maybe в MaybeT
Скажем, у меня есть foo :: Maybe Int , и я хочу связать его, например, с bar :: Int -> MaybeT (Writer String) Int , как это можно сделать идиоматически? Я мог бы определить свою собственную функцию liftMaybe , а затем использовать ее,...
2803 просмотров
schedule 13.07.2023

Объединить две монады, когда ни у одной из них нет преобразователя?
Я играю с написанием веб-приложения. В данном случае я использую scotty и redis , но эта проблема возникает в любой комбинации web/db. До этого я использовал happstack, поэтому мне бы тоже понравился пример. Скотти предлагает вам определять...
807 просмотров
schedule 08.12.2022

Понимание $ в Haskell
У меня есть некоторые трудности с пониманием следующего кода (выполняемого в монаде ErrorT, расположенной поверх IO): closePort [Port port] = liftIO $ hClose port >> (return $ Bool True) >> имеет более высокий приоритет, чем $...
298 просмотров
schedule 02.01.2023

Как правильно добавить IO в парсер attoparsec?
Я хочу выполнить некоторую трассировку/отладку в моем парсере attoparsec. Вот минимальный [не] рабочий пример: import Data.Text as T import Data.Attoparsec.Text import Data.Attoparsec.Combinator import Control.Applicative ((<*), (*>))...
754 просмотров

Как объединить монады состояния и продолжения в F#
Я пытаюсь суммировать дерево с помощью библиотеки параллельных задач, где дочерние задачи создаются только до тех пор, пока дерево не будет пройдено до определенной глубины, а в противном случае оно суммирует оставшиеся дочерние узлы, используя стиль...
517 просмотров

Как мне на самом деле выполнить монаду StateT вместе с IO?
Я пытаюсь следовать совету, данному в разделе Объединить состояние с действиями ввода-вывода для создания AppState вместе с монадой IO. Что я получил, так это: module Main where import Control.Monad.State import Control.Monad.Trans data ST =...
1238 просмотров
schedule 27.05.2022

Объедините асинхронный F # и, возможно, вычислительное выражение
Скажем, я хочу вернуть Option в рабочем процессе async : let run = async { let! x = doAsyncThing let! y = doNextAsyncThing x match y with | None -> return None | Some z -> return Some <| f...
2965 просмотров

Работа с Maybe a, IO a и MaybeT IO a
Я пишу систему в стиле подсказки-ответа с кучей различных комбинаций Maybe a, IO a и MaybeT IO a, и есть много вещей, которые нужно учитывать. Некоторые действия ввода-вывода, для которых нет недопустимых входных данных (и, следовательно, не...
2800 просмотров
schedule 07.10.2022