Aleksei (astynax)
map ((^ 2) . (- 2))
Mi Shа
(- 2) не должно работать
Aleksei (astynax)
Ну да
Mi Shа
'subtract' 2
Aleksei (astynax)
у subtract вообще скобки не нужны вокруг
Aleksei (astynax)
map ((^ 2) . subtract 2)
Aleksei (astynax)
Композиция имеет ниже приоритет, чем вызов функции
Mi Shа
Первым параметром subtract разве принимает вычитаемое? Неочевидно
a66ath
Почему первым?
Mi Shа
subtract 2 4 == 2
Mi Shа
Первым параметром идет вычитаемое
a66ath
А, ну это чтобы было удобно
a66ath
subtract2 = subtract 2
a66ath
Вычесть 2 из
Aleksei (astynax)
subtract, это префиксная форма для композирования как раз. Поэтому и вычитаемое первым пераметром идет. Да и мнемоника опять же "вычесть 2"
Cheese
Aleksei (astynax)
Но порядок аргументов то специально обратный
Cheese
специально для того случая, в котором синтаксис мешает
Cheese
антисиноним
Cheese
то есть костыль
Anonymous
а вот в Агде! а вот в Агде!..
Anonymous
там сейчас можно писать _- 2 например
Anonymous
получается именно то, что обсуждается
Aleksei (astynax)
Ну в хаскеле можно было не делать минус и число через пробел литералом для отрицательного числа.
Aleksei (astynax)
Написал слитно - получаешь число со знаком, а написал отдельно - получаешь сечение минуса
a66ath
Можно было как в J сделать
Ilya
зачем вообще этот subtract нужен? лямбда-версия и то короче
кана
No pointfree no life
Ilya
кана
1) ну таки пробелы и скобки ты не учел
2) лямбду нужно полностью самому писать, а в случае с сабтрактом только пару букв (мы же не в блокнотах пишем)
Ilya
ага, прям руки отсохнут \x->x- без автодополнения написать:) ужас
кана
Так руки не отсохнут и subtract написать, это же ты начал, что лямбда короче
Ilya
короче - это значит компактнее код, причём тут автодополнение
Ilya
чем больше влезает в 80 символов - тем лучше
кана
f . (\x -> x - 2) . g
f . subtract 2 . g
кана
Я же сказал, что ты не учел пробелы и скобки
Ilya
Пробелы не обязан учитывать:) грамматика позволяет без них писать. Про скобки согласен. Со скобками, но без пробелов, первый вариант всё равно короче ☺️
Ilya
Ilya
не верю, что для кого-то первый вариант "нечитаем"
Aleksei (astynax)
первый вариант слишком много мусора визуально содержит
Aleksei (astynax)
Так можно и до "композим только лямбды" дойти
Vasiliy
f.(-2 +).g не прокатит?
Aleksei (astynax)
f . subtract 2 . g "ровнее" выглядит
Кабачок
Кабачок
Проще понять вызов частично применённой функции, чем лямбды с какими то рандомными коротки, ведь лямбда же, именами параметров.
Кабачок
Имхо.
Aleksei (astynax)
лямбды в хаскеле мне лично вообще не хочется писать. Только в случае forM и подобных
A64m
я тоже лямбды не люблю
Anonymous
сенсация - хаскеллисты не любят лямбды! в то время как даже в богопротивную джаву их ввели и начали активно использовать.
доня.
лол
A64m
чего тут такого? в непосредственном предке хаскеля вообще лямбд не было
Anonymous
не, я понимаю. pointfree. но звучит все равно неплохо - хаскеллисты не любят лямбды! а на эмблеме что?
Anonymous
а за что их не любят то
Ilya
Недостаточно элитарно
Anonymous
за синтаксический мусор, видимо
Anonymous
какой синтаксический мусор 🤔
доня.
да дело не в синтаксическом мусоре
просто f . subtract 2 . g гораздо лучше отражает суть происходящего, чем f . (\x -> x - 2) . g
Anonymous
но зачем если есть f . (- 2) . g
Алексей
Нету (-2) это литерад
доня.
вот я кстати в таких случаях всегда не уверен, литерал или частично применённый оператор
Λrtem
Минус это исключение
Anonymous
Anonymous
о ого
доня.
вообще думаю лучше было бы если бы не было литералов вида -2
доня.
Anonymous
Prelude> (- 2) 1
<interactive>:7:1: error:
• Non type-variable argument in the constraint: Num (t -> t1)
(Use FlexibleContexts to permit this)
• When checking the inferred type
it :: forall t t1. (Num (t -> t1), Num t) => t1
Cheese
когда-то и не было
Λrtem
Cheese
Anonymous
Cheese
наши предки в пещерах ели мамонта и писали на Хаскелле отрицательные числа как 0-2
Anonymous
это тоже
Ilya
Anonymous
нужен другой литерал
доня.
ну или так, да, типа ~2
Алексей
Не иметь литералов для отрицательных чисел так вообще дно
Cheese
нашли главную проблему Хаскелла! запилите мне сначала зависимые типы, потом чините свой минус
Anonymous
ну для 1/x нету же спецсинтаксиса, и как-то живут. а для 0-x почему-то нужен.