JS
[(8,"a"), (3,"b")] &Как бы сделать с
traversed %~ (f :: (Int, String) -> (Int, String))
f :: Int -> String -> String
, поменяв то, что слева от %~
, а не справа, или само %~
uncurry f
Size: a a a
JS
[(8,"a"), (3,"b")] &Как бы сделать с
traversed %~ (f :: (Int, String) -> (Int, String))
f :: Int -> String -> String
, поменяв то, что слева от %~
, а не справа, или само %~
uncurry f
к
[(8,"a"), (3,"b")] &Как бы сделать с
traversed %~ (f :: (Int, String) -> (Int, String))
f :: Int -> String -> String
, поменяв то, что слева от %~
, а не справа, или само %~
KV
f :: Int -> String -> String
g (i,s) = (i, f i s)
и воткнуть тудаЗП
uncurry (liftA2 (.) (,) f)
:DKV
KV
f
JS
f :: Int -> String -> String
g (i,s) = (i, f i s)
и воткнуть тудаtraverse %~ imap f
JS
f
KV
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
JS
traverse %~ imap f
KV
JS
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
JS
JS