Вопросы по теме 'haskell-lens'

Как мне обработать результат Maybe для at в Control.Lens.Indexed без экземпляра Monoid
Я недавно обнаружил пакет Lens на Hackage и сейчас пытаюсь использовать его в небольшом тестовом проекте, который в один прекрасный день может превратиться в сервер MUD / MUSH, если я продолжу над ним работать. Вот уменьшенная версия моего кода,...
2022 просмотров
schedule 20.10.2021

Значение по умолчанию, если его нет на карте
Для моих целей мне нужен контейнер, похожий на карту, с какими-то «свойствами». Не исключено, что мои объекты могут иметь разные свойства. Для доступа к свойствам я решил использовать Control.Lens , это очень интересно. Но я не могу найти подобный...
1150 просмотров
schedule 06.09.2021

Как увеличить кислотное состояние?
data Foo = Foo { _bar :: Map String Integer } deriving (Eq, Ord, Read, Show, Data, Typeable) $(deriveSafeCopy 0 'base 'Foo) $(makeLenses ''Foo) Учитывая приведенный выше код, у меня сложилось впечатление, что это должно быть возможно:...
284 просмотров
schedule 30.10.2021

Как написать сложный объектив, который зависит от других объективов, используя библиотеку объективов?
На данный момент у меня есть тип WorkLog с датой начала и окончания. Я хочу также добавить линзу продолжительности, которая будет выводиться из дат начала и окончания. Он должен быть либо только для чтения, либо изменить дату окончания, если его...
185 просмотров
schedule 07.10.2021

Как concatMap по всем парам ключ / значение в Aeson.Object с помощью линз
Я дурачился с комбинаторами в Control.Lens.Indexed, особенно _ 1_ , но мне не удалось придумать функцию со следующим type-sig, используя _ 2_ lens: func -- list of key/value pairs, essentially :: Aeson.Object --...
82 просмотров
schedule 24.09.2021

Как переставить объект Aeson.Object с помощью линз?
Кажется, я сохраняю застревать , когда я обращаюсь за линзами, чтобы преобразовать какой-нибудь JSON. После синтаксического анализа этого в _1 _... { "action": { "action": "reply", "replies": [ "Does this work?", "What...
81 просмотров
schedule 14.10.2021

Функциональное обновление произвольно вложенных структур данных с линзами
Скажем, у меня есть структура данных, представляющая Bag of Holding, которая может содержать несколько элементов. Пользователь может поместить в этот мешок еще один Мешок Холдинга, и этот мешок может содержать другие мешки или даже мешки с мешками....
228 просмотров

Экземпляр Zoom над Free Monad
Я пытаюсь создать бесплатную монаду (используя free ), которая действует так же, как монада StateT , но который также позволяет запускать монады в базовом состоянии AppState . У меня есть отдельный конструктор LiftAction , который содержит эти...
168 просмотров

Как использовать библиотеку объективов?
Я снова зашел в тупик, пытаясь работать с библиотекой Edwards lens . Я пытаюсь что-то snoc добавить в конец вектора в контексте состояния: data Foo = Foo { _vec :: Vector Int } makeLenses ''Foo testCons x = vec <>= singleton x...
274 просмотров
schedule 02.05.2022

Как я могу использовать `over` из Control.Lens, но выполнять монадическое действие и собирать результаты?
Проблема довольно проста. У меня есть структура, которая выглядит примерно так data Foo = Foo [Bar] data Bar = Boo | Moo Item Int data Item = Item String Int и у меня есть линза для изменения содержимого Item s внутри структуры данных,...
305 просмотров
schedule 25.05.2022

Ошибка haskell изменяет пользовательский ввод на пользовательский тип данных в функции
handleStatements :: [Term] -> IO () handleStatements statements = do let (queries, clauses) = partition isQuery statements mapM_ (clausesEntailProof clauses) queries --apply clauses to queries and ignore result handleArgs ::...
37 просмотров
schedule 04.06.2022

Как использовать один и тот же селектор записей двумя способами внутри функции? Линзы?
У меня есть некоторые данные, которые имеют разные представления в зависимости от параметра типа, а-ля Sandy Maguire's Higher Kinded Data . Вот два примера: wholeMyData :: MyData Z wholeMyData = MyData 1 'w' deltaMyData :: MyData Delta...
56 просмотров

Как упростить вызов поля по имени полиморфного поля в один класс типов
В предыдущем вопросе я спросил, как можно сделать поле записи полиморфным при использовании DuplicateRecordFields. Я получил отличный ответ на этот вопрос от @user2407038 . Он ответил на вопрос моей первоначальной спецификации, предоставив один...
90 просмотров

Примените два фолда или геттера и преуспейте только в том случае, если оба успешны
Представьте, что у меня есть следующий список: lst :: [(Bool, Maybe Integer)] lst = [(True, Just 3), (True, Nothing), (False, Just 12)] Используя библиотеку линз, я хочу извлечь элементы кортежей, но я хочу, чтобы это удалось только тогда,...
98 просмотров
schedule 12.07.2022

Внутренний элемент фильтра из дерева через линзу
Я постоянно признаю, что плохо разбираюсь в объективах, но разве учиться на примерах — это не хорошо? Я хочу взять HTML, разобрать его с помощью taggy-lens , а затем удалить все элементы script изнутри. Вот моя попытка: #!/usr/bin/env stack...
275 просмотров
schedule 24.07.2022

Что в объективе я должен использовать для создания геттера только для чтения по индексу?
У меня есть тип, внутренние детали которого скрыты. Я хочу предоставить какую-то линзу, которая может считывать элементы указанного типа по определенным индексам, но не изменять их. Экземпляр Ixed для моего типа, похоже, не делает то, что я...
249 просмотров
schedule 16.08.2022

Haskell: поднимите обычную функцию на линзу
У меня есть HashMap, который содержит разные вещи (значение от Aeson): cs :: Hashmap Text Value cs = fromList [("phone", String "+00"), ("count", Number 1)] Я понял, что могу легко извлекать элементы с помощью Lens...
52 просмотров
schedule 21.08.2022

Haskell — линзы, использование функции «to»
У меня есть следующий код. Я хотел бы иметь возможность изменять жизнь активного игрока при задании состояния игры. Я придумал объектив activePlayer , но когда я пытаюсь использовать его в сочетании с оператором -= , я получаю следующую ошибку:...
820 просмотров
schedule 30.08.2022

Есть ли прямой способ объединить сеттеры для нескольких полей записи с одним сеттером?
import Control.Lens import Control.Lens.TH data Foo = Foo { _bar, _baz :: Int } makeLenses ''Foo Теперь, если я хочу изменить оба поля int, я могу сделать barbaz :: Setter' Foo Int barbaz = sets $ \foo f -> foo & bar %~ f...
440 просмотров
schedule 19.09.2022

дерево обхода с линзами и молниями
Я изучаю пакет Lens. Должен сказать, что это довольно сложная задача. Может ли кто-нибудь показать мне, как пройти по дереву с застежкой-молнией из объектива? В частности, как я могу написать функцию, которая берет список корней и позволяет мне...
2283 просмотров
schedule 21.02.2023