Публикации по теме '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 просмотров
schedule
23.11.2022
Использование 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 просмотров
schedule
04.12.2023
Написание экземпляра 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 просмотров
schedule
28.04.2022
Есть ли функция 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 просмотров
schedule
06.06.2023
scalaz List[StateT].sequence — не удалось найти неявное значение для параметра n: scalaz.Applicative
Я пытаюсь понять, как использовать StateT для объединения двух преобразователей состояния State на основе комментария к моему Примеры монад состояния Scalaz answer.
Кажется, я очень близок, но у меня возникла проблема при попытке применить...
1359 просмотров
schedule
03.11.2023
Как внедрить значение 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 просмотров
schedule
20.01.2023
Как объединить монады состояния и продолжения в F#
Я пытаюсь суммировать дерево с помощью библиотеки параллельных задач, где дочерние задачи создаются только до тех пор, пока дерево не будет пройдено до определенной глубины, а в противном случае оно суммирует оставшиеся дочерние узлы, используя стиль...
517 просмотров
schedule
21.01.2023
Как мне на самом деле выполнить монаду 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 просмотров
schedule
01.04.2022
Работа с Maybe a, IO a и MaybeT IO a
Я пишу систему в стиле подсказки-ответа с кучей различных комбинаций Maybe a, IO a и MaybeT IO a, и есть много вещей, которые нужно учитывать. Некоторые действия ввода-вывода, для которых нет недопустимых входных данных (и, следовательно, не...
2800 просмотров
schedule
07.10.2022