Описание тега lenses

В функциональном программировании линза - это составной полевой аксессуар. Линзы позволяют управлять вложенными структурами данных в краткой форме и без побочных эффектов.
3 ответа

Вставка в список в определенном месте с помощью линз

Я пытаюсь выполнить манипулирование вложенной структурой данных, содержащей списки элементов. После осмотра разных подходов я наконец-то остановился на линзах как на лучшем способе сделать это. Они отлично работают для поиска и изменения определенны…
28 авг '13 в 03:52
1 ответ

Бесформенные линзы странного поведения

Я пытаюсь преобразовать свой класс дела в последовательность, содержащую линзу для каждого поля. Я создал следующий упрощенный пример, чтобы выделить проблему, с которой я столкнулся. Следующий код выдаст ошибку времени выполнения: import shapeless.…
16 апр '18 в 11:36
2 ответа

Зачем моему типу данных нужен экземпляр Monoid для использования этого объектива?

Я использую код ниже для записи, которая имеет поле '_scene' типа SceneGraph. Я создал линзы для него, используя makeLenses. inputGame :: Input -> Game -> Game inputGame i g = flip execState g $ do let es = g ^. userInput . events sg = g ^. sc…
09 июл '13 в 01:47
3 ответа

Линзы и TypeFamilies

Я столкнулся с проблемой использования Control.Lens вместе стипы данных при использовании -XTypeFamilies GHC Pragma. {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} import Control.Lens (makeLenses) class SomeClass t where data SomeDat…
1 ответ

Для индексации списка с Control.Lens требуется ограничение Monoid

Следующий код не компилируется: {-# LANGUAGE TemplateHaskell #-} import Control.Lens data MyType = MyType Int data Outer = Outer { _inners :: [ Inner ] } data Inner = Inner { _val :: MyType } $(makeLenses ''Outer) $(makeLenses ''Inner) i1 = Inner (M…
08 июл '13 в 02:12
2 ответа

HTTP Lens для взаимодействия с API?

Я только начинаю набирать обороты с Haskell, и мне нравятся абстракции, с которыми я сталкиваюсь ежедневно, такие как lens, Я дошел до того, что с линзой REST API было бы полезно поработать, но, прежде чем я потратил часы на поиск, это невозможно...…
24 фев '17 в 23:13
1 ответ

Каков синтаксис для составления сеттерских линз?

Я новичок в объективе и хочу составить две "установочные" операции, которые будут эквивалентны преобразованию state0 в new_state2: let new_state1 = field1 %~ (const newVal1) $ state0 let new_state2 = field2 %~ (const newVal2) $ new_state1 Какой синт…
20 май '16 в 21:00
1 ответ

Как я могу использовать `over` из Control.Lens, но выполнять монадическое действие и собирать результаты?

Проблема довольно проста. У меня есть структура, которая выглядит примерно так data Foo = Foo [Bar] data Bar = Boo | Moo Item Int data Item = Item String Int и у меня есть линза для изменения содержимого Items внутри структуры данных, такой как эта …
01 июл '14 в 16:17
3 ответа

Имитация взаимодействующих объектов с сохранением состояния в Haskell

В настоящее время я пишу программу на Haskell, которая включает моделирование абстрактной машины, которая имеет внутреннее состояние, принимает входные данные и выдает выходные данные. Я знаю, как реализовать это, используя монаду состояния, что при…
02 окт '16 в 03:50
1 ответ

Haskell Control.Lens Traversing Prism

У меня глубоко вложенная структура данных, и я использую Control.Lens.*, Чтобы упростить доступ к его значениям в монаде состояния. Итак, рассмотрим следующее: data Config = Config { _foo :: Maybe Int , _bar :: Int } $(makeLenses ''Config) Как мне р…
24 окт '13 в 02:42
1 ответ

Обход и добавление элементов в Data.Tree с использованием линз в Haskell

Я начинаю использовать линзы, и до сих пор я не мог использовать их в конкретной части кодовой базы, которую я пишу. Моя цель - обновить структуру розового дерева, такую ​​как Data.Tree добавив новый узел внутри одного из существующих. Для этого я п…
02 апр '17 в 16:22
1 ответ

Взаимодействие смежных компонентов в термите

Сложный тест шаблонов проектирования пользовательского интерфейса оказывается простой задачей: Создать универсальный компонент (в нашем случае кнопка) использовать его в родительском компоненте заставить дочерний компонент "активировать" эффекты в р…
21 янв '17 в 07:18
2 ответа

Хаскелл | Как получить значение из глубоко вложенной структуры данных?

Я новичок в Haskell, и я пытаюсь узнать больше о языке, выполняя базовый анализ. У меня есть код, который анализирует файл XML и производит это [ Element { elName = QName { qName = "title" , qURI = Nothing , qPrefix = Nothing } , elAttribs = [] , el…
18 дек '18 в 13:13
2 ответа

Разве это не избыточно для Control.Lens.Setter для обёртывания типов в функторы?

Я смотрю Control.Lens вступительное видео.Это заставляет меня задуматься, зачем это нужно Setter типа обернуть вещи в функторы.Это (примерно) определено так: type Control.Lens.Setter s t a b = (Functor f) => (a -> f a) -> s -> f t Допуст…
06 июн '16 в 20:57
1 ответ

Ошибка с типом "никогда" при использовании extends keyof в качестве универсального типа

Мой код в машинописи: class Author { id: number; } type Getter<S, A> = (obj: S) => A; function propGetter<S, K extends keyof S>(prop: K): Getter<S, S[K]> { return o => o[prop]; } const _id: Getter<Author, number> = prop…
15 июл '17 в 22:35
1 ответ

Являются ли опции Monocle такими же, как частичные линзы?

Опции Monocle имеют следующие функции доступа (для Optional[C,A]): getOption: C => Option[A] set: A => C => C Это противоречит первоначальному определению (частичной) асимметричной линзы данных. Я бы ожидал: getOption: C => Option[A] set…
15 ноя '15 в 21:51
2 ответа

Почему функция набора призмы не возвращает Option/Maybe

В функциональной оптике, призма с хорошим поведением (я полагаю, называется частичной линзой в скале) должна иметь заданную функцию типа 'subpart -> 'parent -> 'parentгде, если призма "успешна" и структурно совместима с 'parent аргумент дан, т…
23 сен '17 в 20:51
2 ответа

Экспорт только модуля или метода установки из модуля

Есть ли способ для меня экспортировать только определенные геттеры или сеттеры из модуля с объективом? Например, давайте предположим, что структура данных имеет инвариант всегда >= 0изменяемый только путем увеличения его и создаваемый только с на…
14 дек '14 в 23:09
0 ответов

Выбор полей кортежа с помощью линз (Haskell)

Следующее не работает, как это исправить? Prelude Control.Lens> (2, 3, 4) ^. alongside _1 _2 <interactive>:19:14: Couldn't match type ‘(s0, s'0)’ with ‘(t0, t1, t2)’ Expected type: Getting (a, a') (t0, t1, t2) (a, a') Actual type: LensLike …
30 дек '14 в 13:17
2 ответа

Control.Lens объектив для общей карты

У меня есть общая карта от типа A до типа B. import qualified Data.Map as M import Data.Maybe tmGet k m = fromJust $ M.lookup k m tmSet k v = M.insert k v я использовал Data.Map в качестве примера реализации, но это может быть что угодно, например A…
15 окт '13 в 12:43