LINUX.ORG.RU

Вопрос по линзам

 ,


1

2

Чтение манов — для слабаков, а талмуда по lens — тем более. Вопрос: как совместить два действия над одним значением изящнее, чем:

import Control.Lens

on1 :: (b -> a -> c) -> (a -> b) -> a -> c
on1 f g a = f (g a) a

main = do
    print $ on1 (_1 +~) (view _2) (1, 2)
    print $ on1 (views _1) ((+) . view _2) (1, 2)


Последнее исправление: fmdw (всего исправлений: 2)
Ответ на: комментарий от qnikst

Мне интересно скорее не то, как переписать on1 в point-free, а можно ли обойтись без этого костыля (on1) вообще.

fmdw
() автор топика
Ответ на: комментарий от f1u77y

Классно, спасибо. Про instance Monad (->) я и забыл.

fmdw
() автор топика
Ответ на: комментарий от pbsucks

on1 (_1 +~) (view _2) (1, 2)

прибавляет в 1-му элементу кортежа 2-й.

on1 (views _1) ((+) . view _2) (1, 2)

выводит 1-й элемент кортежа, применяя перед этим функцию «прибавить 2-й».

по коду без костыля on1 чуть понятнее.

f1u77y ★★★★
()
Ответ на: комментарий от f1u77y

Для инопланетян? Если что я немного знаю хаскель (читал «Learn Haskell for greater good» и «Жемчужины функционального программирования»), но не считаю это читабельным.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

Ты не понимаешь. Хаскель идеальный язык программирования. Если твои программисты пишут на хаскеле, ты можешь быть уверен, что их моск работает, даже если они быдлокодят.

Virtuos86 ★★★★★
()
Ответ на: комментарий от DELIRIUM

адекватный код на хаскеле читается интуитивно, если ты умеешь читать и хоть немного проникся монадами(в данном случае ещё и линзами).

f1u77y ★★★★
()
Prelude> uncurry (+) (1,2)
3

lens ниумею

sf ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.