Size: a a a

2021 March 03

JS

Jerzy Syrowiecki in Haskell
Kirill Valyavin
Линзо-челлендж!
[(8,"a"), (3,"b")] &
 traversed %~ (f :: (Int, String) -> (Int, String))

Как бы сделать с f :: Int -> String -> String, поменяв то, что слева от %~, а не справа, или само %~
uncurry f
источник

к

кана in Haskell
Kirill Valyavin
Линзо-челлендж!
[(8,"a"), (3,"b")] &
 traversed %~ (f :: (Int, String) -> (Int, String))

Как бы сделать с f :: Int -> String -> String, поменяв то, что слева от %~, а не справа, или само %~
о я вроде придумал
источник

KV

Kirill Valyavin in Haskell
Зигохистоморфный Препроморфизм
вообще не понятно, что хочешь
Ну вот есть у меня фунция f :: Int -> String -> String
Я могу из неё сделать g (i,s) = (i, f i s) и воткнуть туда
Но не хочу, хочу сразу просто f писать
источник

ЗП

Зигохистоморфный Пре... in Haskell
uncurry (liftA2 (.) (,) f) :D
источник

KV

Kirill Valyavin in Haskell
Да, да, вот именно это я писать и не хочу
источник

KV

Kirill Valyavin in Haskell
кана
о я вроде придумал
Бонусный вопрос: а можно ли так сделать не для пары с проекциями  компонент, а для любого типа с линзами по одной на аргумент f
источник

JS

Jerzy Syrowiecki in Haskell
Kirill Valyavin
Ну вот есть у меня фунция f :: Int -> String -> String
Я могу из неё сделать g (i,s) = (i, f i s) и воткнуть туда
Но не хочу, хочу сразу просто f писать
traverse %~ imap f
источник

JS

Jerzy Syrowiecki in Haskell
Kirill Valyavin
Бонусный вопрос: а можно ли так сделать не для пары с проекциями  компонент, а для любого типа с линзами по одной на аргумент f
можно пример?
источник

к

кана in Haskell
источник

KV

Kirill Valyavin in Haskell
Jerzy Syrowiecki
можно пример?
data Context a b c = Context
 { fieldA :: a
 , fieldB :: b
 , fieldC :: c }

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

Даже можно не две линзы тут указать, а три, чтобы в третью складывать результат функции от первых двух, как-то так
источник

KV

Kirill Valyavin in Haskell
Здорово, конечно, но я ожидал какой-нибудь хитрый комбинатор из lens
источник

к

кана in Haskell
а у тебя есть готовое решение, или ты сам его ищешь?
источник

JS

Jerzy Syrowiecki in Haskell
Jerzy Syrowiecki
traverse %~ imap f
готовое решение я уже написал же
источник

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"]

Даже можно не две линзы тут указать, а три, чтобы в третью складывать результат функции от первых двух, как-то так
врядли такое нужно всем
источник

к

кана in Haskell
Jerzy Syrowiecki
готовое решение я уже написал же
ты же поменял справа от %~
источник

к

кана in Haskell
а не слева, как по условию
источник

KV

Kirill Valyavin in Haskell
Поменять поле в рекорде функцией от других полей? Нужно не всем? Да ладно
источник

JS

Jerzy Syrowiecki in Haskell
думаю, важнее помочь @Elvecent, чем соблюсти условия
источник

JS

Jerzy Syrowiecki in Haskell
Kirill Valyavin
Поменять поле в рекорде функцией от других полей? Нужно не всем? Да ладно
не нужно универсальное решение. ты сам можешь написать чтение и запись полей
источник