Библиотека линз для Haskell.
0 ответов

Есть ли объективный способ отобразить все элементы на карте и, возможно, удалить некоторые?

Объектив имеет imap / imapped, который может быть использован для изменения элементов Data.Map зависит от индекса, но не удаляет элементы. Он также имеет at, который может получить доступ / изменить и удалить один элемент. Есть ли общий способ получ…
17 июн '16 в 13:40
2 ответа

Используйте библиотеку линз Haskell, чтобы отобразить линзу

В приведенном ниже коде мой вопрос касается самой верхней функции someFunc (все, что ниже, это просто полный пример). Я использую get-синтаксис записи и fmap там. Как линзовый способ реализовать someFunc? import Control.Lens import Data.IntMap (IntM…
14 ноя '16 в 14:27
1 ответ

Составьте линзы с доступом к внешнему типу во время получения и установки

Предположим, у меня есть функция, которая извлекает некоторое внутреннее значение, используя другое внутреннее значение из внешнего значения. func :: outer -> inner1 -> inner2 Тогда у меня есть функция, которая создает линзу между внешним знач…
01 мар '16 в 21:30
1 ответ

Различные типы сеттеров и геттеров в линзах Haskell

У меня есть data type G, которые получили поле _repr :: Data.Graph.Inductive.Gr String String, Обычный способ, при добавлении нового узла в Gr график, мы должны предоставить LNode a объект, который в основном определяется как кортеж (Int, a)где Int …
22 июл '13 в 17:23
1 ответ

Haskell MTL / трансформаторы эквивалентно масштабированию состояния объектива

Я работаю над веб-приложением на основе мисо и пытаюсь обернуть модель (состояние) Transition Action InnerModel () в Transition Action ModelWrapper () где type Miso.Transition action model = StateT model (Writer [Sub action]) а также data ModelWrapp…
07 фев '19 в 23:22
1 ответ

Как написать Traversal для GADT?

Можно ли написать Traversal для ГАДТ? Я имею: {-# LANGUAGE TypeInType, GADTs, TypeFamilies, RankNTypes #-} module GADT where import Data.Kind data Tag = TagA | TagB data family Tagged (tag :: Tag) data Foo (tag :: Maybe Tag) where Foo :: Int -> F…
21 ноя '17 в 17:46
1 ответ

Семейства типов не могут возвращать тип RankN - обходные пути или альтернативы?

Я играю с расширяемой библиотекой записей и хочу написать функцию field который может работать как Lens или Traversal в зависимости от того, Symbol Ключ находится в списке ключей. Типовое семейство дается: type family LensOrTraversal key keys s t a …
03 май '17 в 21:47
0 ответов

Идиоматический способ обмена определениями поля объектива между модулями

Если у меня есть два модуля, которые оба используют Control.Lens.TH' makeFields для создания полей из записи, и запись в каждом из разных модулей имеет одно и то же имя поля, что является наилучшим способом обеспечения того, чтобы два модуля использ…
01 окт '14 в 17:15
2 ответа

Индекс Обход с помощью объектива

У меня есть объектив, указывающий на документ JSON, например doc ^? ((key "body").values) Теперь я хотел бы проиндексировать значения в теле с ключом "ключ", потому что JSON выглядит как {"body": [{"key": 23, "data": [{"foo": 1}, {"foo": 2}]}]} Поэт…
03 май '18 в 13:41
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
1 ответ

Проблема рекурсии при написании версии Lens.para с поддержкой "Pretext"

Я пытался построить замену Lens.para это обеспечивает линзовые контексты для функции para, когда она выполняет свою работу. Однако, я, кажется, где-то допустил ошибку в рекурсии. Согласно моему пониманию, Lens.para является функцией параморфизма зна…
18 июн '17 в 07:16
3 ответа

Haskell использует линзы первого уровня для создания сложных линз

Допустим, у меня есть объект с двумя полями: data Example = Example { _position :: Int , _storage :: [Int]} как мне построить линзу, которая фокусируется на position элемент внутри storage? Кроме того, будет ли возможно ограничить position значения,…
12 апр '16 в 10:04
0 ответов

Почему индексированные линзы определены так, как они есть?

В этой ветке Reddit есть несколько очень полезных объяснений того, как определяются индексированные линзы, но я хотел бы узнать подробности. Таким образом, основной момент заключается в том, что индексированные линзы определены так, что их также мож…
05 май '18 в 21:12
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
1 ответ

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

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

Почему ограничение класса в синониме типа требует RankNTypes

Это хорошо компилируется: type List a = [a] Но когда я ввожу ограничение класса, компилятор запрашивает RankNTypes быть включенным: type List2 a = Num a => [a] После включения этого расширения оно прекрасно компилируется. Почему это расширение тр…
08 апр '14 в 18:28
1 ответ

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

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

Какая история стоит за Геттером?

Я наткнулся на определение Геттер, имеющий как Functor а также Contravariant ограничение на f, Неудивительно, что "добытчик" мало что может сделать с "содержавшейся частью", но эта подпись выглядит как Призрак в "ван Лаарховене" (a -> f a) -> …
21 авг '16 в 19:20
1 ответ

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

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