Size: a a a

Elm Lang сообщество разработчиков

2017 October 26

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Частичное применение возможно, каррирование - нет
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Но каррирование, это модель вычисления, подчеркну. Каррирующие по умолчанию языки так выполняют код - по одному аргументу за раз.
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
А частичное применение есть и в питоне том же partial(map, abs)
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
С другой стороны каррирование - это функция из (a, b) -> c делающая a -> b -> c
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
то есть это HOF
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
curry :: ((a, b) -> c) -> (a -> b -> c)
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
curry - функция высшего порядка
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Конечно нет. В Haskell не используется curry в коде ядра. Это просто хелпер
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
curry - ФВП, конечно
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Но частичное применения != частичное применение по месту вызова. Это просто "паттерн". Поэтому частично применить функцию, завернув в новую, которая подставит нужные параметры, можно и в C - технически. Но польза будет сомнительна :)
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
К тому же частичное применение ничего не делает с арностью - т.е. не меняет суть функции, не делает оную каррированой
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Каррирование - более фундаментальная штука. И чтобы каррирование не мешало работе, нужен синтаксис соответствующий. У ML-языков неспроса нет скобок вокруг аргументов - именно для того, чтобы каррированные функции было не слишком больно использовать
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
Кароч, в Хаскелле, Elm, PureScript это всё элегантно, в Java, Python, JS - нет
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Каррирование увеличивает удобство пользования ФВП. И без него гораздо грустнее. Но совсем без ФВП - совсем печально
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
Ещё паттерн матчинг можно упомянуть, он тоже в Хаскелле очень хорошо вписывается в картину
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Частичное применение с достаточной синтаксической поддержкой тоже помогает ФВП даже в некаррирующих языках. Кложа с тамошним #(% * 2) вполне живет и без каррировани - там другие пробелемы, но хоть ФВП нормально можно пользовать
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
А вот пример того, как испоганили язык
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
Какая-то каша получилась, Scala-way
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Pattern Matching очень удобен, но только в языках с ADT, т.к. только в них можно проверить exhaustiveness. В языках без ADT толку от сопоставления с образцом мало
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Reason потому уже и не ReasonML - ML не осталось
источник