• ? дыбр Haskell погроммирование можно ли к типу в линзе в сеттерах частично применить traverse?
    т.е. допустим, 80% рекордов — это обёртка над Text, хочу написать меньше кода.
    а остальные можно и руками добить.
    ♡ recommended by @ndtimofeev

Replies (9)

  • @agr, Не понял что значит частично применить traverse. Ты можешь сеттер скомбинировать с траверсалом и получить траверсал.
  • @segfault, data A = A { _a1 :: Text, _a2 :: Text, ..., _a8 :: Text, _a9 :: Int, _a10 :: UUID } ...
    первые 8 полей бы затраверсить
  • @agr, так, спасибо!
    завтра на свежую голову буду до просветления раскуривать.
  • @agr,
    hackage.haskell.org
    Тебе нужен each, он определен для туплов, тупл можешь получить сгенерированной призмой
  • @segfault, Я тупанул, ну короче да, скомбинировать можешь, смотри как определены инстансы для each у туплов
    each <hacka> f <hacka> ~(a <hacka>,b <hacka>,c <hacka>) = (,,) <$> f <hacka> a <hacka> <> f <hacka> b <hacka> <> f <hacka> c <hacka>

    Аналогично можешь написать нужный траверсал.
  • @agr, звучит как задача для plated
  • @segfault, спасибо! вечером буду разбираться!
  • @qnikst, спасибо!! блин, в них столько всего.. вот бы замахнуться и всё-всё разобрать..
  • @agr, plated это uniplate/biplate интерфейс к линзам, ещё наверняка generic lens могут помочь провернуть все (но я их не умею)