Size: a a a

2021 January 03

к

кана in Haskell Start
если OP это какой-то оператор +=, %=, ...
то <OP это то же самое, только еще и вернуть новое значение

x <- key "a" ._Number <+= 10
x будет исходным значением в a + 10

если OP это какой-то оператор +=, %=, ... + .=
то <<OP это как OP, только вернуть исходное значение
x <- key "a" . _Number <<+= 10
x будет исходным значением в a
источник

A

Aragaer in Haskell Start
а чем операторы с ~ отличаются от операторов с =?
источник

к

кана in Haskell Start
с = это для стейта
источник

к

кана in Haskell Start
&~ это на самом деле просто execState, он засовывает исходное значение в стейт, и потом =-операторы меняют значение в стейте, и потом &~ возвращает финальный стейт
источник

к

кана in Haskell Start
value &~ stateAction = execState stateAction value
источник

A

Aragaer in Haskell Start
мм.. вроде понятно
источник

к

кана in Haskell Start
со стейтом часто может быть удобнее, потому что можно делать подобные штуки

x :: (Int, Int)
x =
 (10, 0) &~ do
   _1 *= 2
   n <- use _1
   for [1 .. n] \i -> do
     when (even i) do
       _2 += i
   _1 .= 0
   
-- >>> x
-- (0, 110)
источник

A

Aragaer in Haskell Start
с &~ do удобно, можно туда же всовывать еще и let
источник

A

Aragaer in Haskell Start
источник

к

кана in Haskell Start
можно вот такой оператор запилить еще думаю
источник

к

кана in Haskell Start
можно сделать без ифа

let cwd = config ^. pre (key "config" . key "WorkingDir" . filtered (not . null)) . non "/"
источник

к

кана in Haskell Start
тут правда будет несколько иное поведение, в твоем случае если не будет поля "config.WorkingDir", то приложение упадет, а в моем случае будет "/" как дефолтное значение
источник

к

кана in Haskell Start
если заменить у тебя ^?! на ^., то тоже будет "/" как дефолт, даже если поля нет

потому что ^. вернет mempty :: String, пустую строку
источник

A

Aragaer in Haskell Start
null не катит, потому что он Text
источник

к

кана in Haskell Start
а ну not . Text.null или (/= "")
источник

к

кана in Haskell Start
еще можно красиво сделать как
Control.Lens.Empty, Control.Lens.Extra:
filtered (isn't _Empty)
или
Control.Lens.Empty:
filtered (hasn't _Empty)
если уже совсем линзами упарываться
источник

A

Aragaer in Haskell Start
надо будет потом к этому вернуться. Сейчас пока годится текущий вариант и надо разбираться с остальными полями
источник

к

кана in Haskell Start
думаю стоит добавить такой траверсал в свою коллекцию
источник

ЗП

Зигохистоморфный Пре... in Haskell Start
кана
думаю стоит добавить такой траверсал в свою коллекцию
думаю лучше filteredBy
источник

ЗП

Зигохистоморфный Пре... in Haskell Start
источник