Чтобы добавлять сообщения и комментарии, .

@segfault:
segfault

А есть у нас в линзах такой Setter который может обновить значение, а может не обновить? Типа

maybeSet :: MaybeSetterLike s t a b -> b -> s -> Maybe t
maybeOver :: MaybeSetterLike s t a b -> (a -> b) -> s -> Maybe t

Как то так должно быть, я полагаю.

@qnikst:
qnikst

как в линзах адекватно написать слайс в двумерном неизменяемом векторе, у меня получилось:

под двухмерным вектором я понимаю `Vector (Vector a)`

v ^. sliced 1 2   - делает слайт вектора

over mapped (slice 1 2) (v ^. sliced 1 2) - делает все что мне надо, 
     но код так ужасен, поскольку часть слева от вектора, часть справа

(over mapped (slice 1 2) v) ^. sliced 1 2 - выглядит получше, но
     полущ но все равно ужасно

(v & mapped %~ (slice 1 2)) ^. sliced 1 2 - ещё лучше, теперь вектор слева, но 
     много смешных символов и скобок

v ^. sliced 1 2 & mapped %~ slice 1 2     -  уже почти по человекчески,
    но все равно плохо.

В итоге, как это правильно записывать, желательно используя только `slice` или только `sliced` и с минимумом прочего мусора. 
Вместо mapped я могу писать traversed или each с тем же результатом, так и задумано?

@segfault:
segfault

А как лучше дерайвить линзы? makeLens makeClassy makeFields ?
Какие подводные камни?
Подозреваю например, что makeFields хоть и хорош, но тайпкласс HasField создается в каждом модуле, так что, если попробуем импортнуть из нескольких модулей модели с одинаковыми именами полей, то нас ждет неудача. То же самое с makeClassy, но конфликтовать будут имена методов.

@dr-Chaos:
dr-Chaos

таки обмазался линзами и рад...

@dr-Chaos:
dr-Chaos

Втащил линзы в код. Упрекнут ли меня потомки?

@segfault:
segfault

lpaste.net
Это божественно, ящитаю.

@segfault:
segfault

А есть у нас в линзах комбинатор для мапа с состоянием?
Типа `over` из `Control.Lens.Setter` но как `mapAccumL` из `Data.List` принимающий функцию, которая меняет состояние.

@Zert:
Zert

Пздц, добавил линзы в цабал, он мне опять половину хекеджа стянул. Збс.

@Zert:
Zert

Где нормальным языком описано, как пользоваться этими вашими линзами? Сколько ни смотрю, везде какая-то непонятная хрень. Нужно начиная вплоть от того, какие расширения и модули подключать.

@qrilka:
qrilka

А вот никто не подскажет откуда именно вылезает требование наличия моноида:
λ> M.fromList [(1,(42, M.fromList [(1,75::Int)]))] ^. at 1 . _Just . _2 . at 1

<interactive>:108:59:
    No instance for (Data.Monoid.Monoid Int)
      arising from a use of `_Just'
    Possible fix:
      add an instance declaration for (Data.Monoid.Monoid Int)
    In the first argument of `(.)', namely `_Just'
    In the second argument of `(.)', namely `_Just . _2 . at 1'
    In the second argument of `(^.)', namely `at 1 . _Just . _2 . at 1'
λ> M.fromList [(1,(42, M.fromList [(1,"b"::String)]))] ^. at 1 . _Just . _2 . at 1
Just "b"

в определении _Just как-то намёков не вижу

@qrilka:
qrilka

а насколько возможно/вменяемо делать линзу которая делает IO? Т.е., например, линзу, которая представляет собой некий контейнер в FS, при этом читать все элементы контейнера может быть накладно, особенно если требуется единичное число этих элементов. Ну и как подвариант (выглядящий довольно криво) — IO для view отдельных элементов с чистым set, ну и IO для записи контейнера целиком.

@qrilka:
qrilka

а кто-нибудь разбирается в этих 4-этажных типах Кметта? В упор не могу сообразить как сделать 2 уровня at — т.е. хочу присвоить значение по ключу k1 в мапе по ключу k2

@i-do:
i-do

Для любителей сдувать пылинки с объективов: kurtmunger.com Текст на английском, но, думаю, и по картинкам всё понятно без перевода.

@qnikst:
qnikst

консультацию по lens кто-дать может? Конкретно сейчас интересно как сделать следующее:
data Foo = Foo Int Int, сделать линзу которая делать i (Foo a b) -> (Foo (a+1) (b+a+i) желательно максимально используя линзовый апи,
так же как правильно делать Bar = Bar [Int] [Int] => i j (Bar as bs) -> модифицировать i-тый элемент as фунцией зависящей от i и j-того
элемента bs?

@amyodov:
amyodov

Внезапно захотелось продать свой объектив Nikkor 18-105/3.5-5.6 VR. Некитовый, отличное состояние, Нижний Новгород, все крышечки-упаковочка-бумажки. Никому не надо, случайно?