Значение \ в идентификаторе Haskell

Это одна из тех уловок, которую труднее найти, когда вы незнакомы с языком, но все остальные знают и используют его.

В моем случае мне интересно, что это значит, когда у вас есть имя переменной, скажем ts, и вы помещаете перед ним символ \:

newtype Parser a = Parser (String -> [(String, a)])
produce :: a -> Parser a
produce x = Parser (\ts -> [(ts, x)])

Я предполагаю, что это абстрагирование переменной? Если да, то как бы он был переведен на другие языки, такие как Scala?


person Rodrigo    schedule 21.07.2018    source источник
comment
@dfeuer Я не понимаю, какое отношение мой вопрос имеет к началу работы с haskell. Конечно, я начинаю работать с haskell, но я думаю, что не все люди, которые начинают с haskell и имеют определенные сомнения, должны, по вашему мнению, перенаправить на то, чтобы начать работу с haskell. пожалуйста, скажи мне, если я что-то здесь упускаю   -  person Rodrigo    schedule 21.07.2018
comment
@dfeuer ссылка, которую вы запросили, - это просто еще один пример идентификатора, который может показаться странным для новичков в haskell, я ссылался, чтобы показать, что этот тип вопроса здесь законен (более 17 голосов). Я также спрашиваю себя, почему мой вопрос отмечен как дубликат, а связанный вопрос stackoverflow.com/questions/5673916/ - нет.   -  person Rodrigo    schedule 21.07.2018
comment
было бы неплохо, если бы те, кто проголосовал против вопроса, любезно объяснили, что они считают в нем не так   -  person Rodrigo    schedule 21.07.2018
comment
К вашему сведению, я не отрицал ваш вопрос. Я пометил это как дубликат канонической цели дублирования, потому что это то, что будет рассмотрено на первых нескольких страницах типичного учебника или учебника Haskell. Stack Overflow - не лучшее место для изучения основ нового языка программирования; для этого есть гораздо лучшие ресурсы. Следует ли рассматривать другой вопрос как дубликат - это вопрос суждения. Это довольно простой вопрос, но это скорее деталь лексического синтаксиса, чем фундаментальная языковая конструкция.   -  person dfeuer    schedule 21.07.2018
comment
@dfeur хорошо, спасибо за разъяснения   -  person Rodrigo    schedule 21.07.2018
comment
Было бы также неплохо отметить, что это можно просматривать в Hoogle, как я узнал в этом вопросе: stackoverflow.com/questions/37286376/what-does-mean-in-haskell   -  person Rodrigo    schedule 21.07.2018
comment
или даже этот другой stackoverflow.com/questions/6824255/, который показывает, как это сделать в ghci   -  person Rodrigo    schedule 21.07.2018
comment
`\` не является оператором и не может быть найден в Google. Это часть основного синтаксиса языка.   -  person dfeuer    schedule 22.07.2018


Ответы (1)


\parameter1 ... parameterN -> expression - это синтаксис Haskell для лямбда-выражений. Эквивалент Scala будет (parameter1, ..., parameterN) => expression (или, если мы хотим сохранить тот факт, что функция каррирована, parameter1 => ... => parameterN => expression).

Для этого синтаксиса была выбрана обратная косая черта, поскольку именно символ ASCII больше всего похож на λ.

person sepp2k    schedule 21.07.2018
comment
Интересно, что произойдет, если имя параметра1 уже использовалось раньше. это возможно в хаскелле? - person Rodrigo; 21.07.2018
comment
@Rodrigo Да, имена параметров могут затенять переменные из внешней области видимости. - person sepp2k; 21.07.2018