Size: a a a

2021 March 03

к

кана in Haskell
дык сделать справа он бы и сам смог, uncurry добавить
источник

JS

Jerzy Syrowiecki in Haskell
кана
дык сделать справа он бы и сам смог, uncurry добавить
нет, uncurry недостаточно, чтобы в такой же форме назад положить
источник

KV

Kirill Valyavin in Haskell
Ну короче я могу сам написать такой комбинатор, но это очень муторно
источник

JS

Jerzy Syrowiecki in Haskell
Kirill Valyavin
data Context a b c = Context
 { fieldA :: a
 , fieldB :: b
 , fieldC :: c }

> [Context True 2 "heck"] & (_ #fieldB #fieldC) %~ replicate
Context True 2 ["heck", "heck"]

Даже можно не две линзы тут указать, а три, чтобы в третью складывать результат функции от первых двух, как-то так
fromBCtoC f (Ctx a b c) = Ctx a b (f b c)

а в общем виде такое решать замучаешься
источник

KV

Kirill Valyavin in Haskell
Замучаюсь, да
источник

JS

Jerzy Syrowiecki in Haskell
Kirill Valyavin
Ну короче я могу сам написать такой комбинатор, но это очень муторно
так чем не нравится imap?
источник

KV

Kirill Valyavin in Haskell
Jerzy Syrowiecki
так чем не нравится imap?
Не будет работать для бонусного варианта с произвольным типом и несколькими линзами
источник

KV

Kirill Valyavin in Haskell
struct & updateFieldDepengingOnOtherFields fieldOne fieldTwo fieldRes (\one two ->...)

Ещё бы хорошо если б эта функция поливариадичная была
источник

к

кана in Haskell
можно индекс сделать в виде пары-тройки-...
источник

к

кана in Haskell
а ну это все не лучше будет
источник

JS

Jerzy Syrowiecki in Haskell
вот я тоже сперва подумал, что надо все параметры в индекс перекинуть. а как это сделать?
источник

KV

Kirill Valyavin in Haskell
НУ ТУТ АНОНИМНЫЕ РЕКОРДЫ НАДО
источник

KV

Kirill Valyavin in Haskell
В общем, это было из серии "как писать на хаскеле как будто не на хаскеле"
источник

JS

Jerzy Syrowiecki in Haskell
а мне всё-таки интересно.

как из оптики по (i, a) сделать оптику по a с индексом i?
источник

KV

Kirill Valyavin in Haskell
Там же тайпклассы
источник

JS

Jerzy Syrowiecki in Haskell
да, там тайпклассы, клоуны с шутами, магма, рынок и базар. а сделать-то как?
источник

KV

Kirill Valyavin in Haskell
Ну чтобы можно было индексить, нужен инстанс тайпкласса, так что вопрос сводится к тому, как сделать инстанс "на ходу". Ответ на этот вопрос известен?
источник

JS

Jerzy Syrowiecki in Haskell
Jerzy Syrowiecki
а мне всё-таки интересно.

как из оптики по (i, a) сделать оптику по a с индексом i?
кажется, что-то нашёл
источник

JS

Jerzy Syrowiecki in Haskell
кана
ты же поменял справа от %~
& traverse . imapped %@~ f
источник

JS

Jerzy Syrowiecki in Haskell
Kirill Valyavin
Ну чтобы можно было индексить, нужен инстанс тайпкласса, так что вопрос сводится к тому, как сделать инстанс "на ходу". Ответ на этот вопрос известен?
какого тайпкласса? Indexed вроде тип, а не класс
источник