Разделы - почему мне нужны обратные ссылки здесь? - программирование

Разделы - почему мне нужны обратные ссылки здесь?

Я пытаюсь понять разделы и думаю, что у меня это есть. В принципе, это способ применения частичного приложения к двоичным операторам. Поэтому я прекрасно понимаю все примеры (2*), (+1) и т.д..

Но в книге "О'Реилли Реальный мир Хаскелл" раздел секций ":) он имеет этот пример:

(`elem` ['a'..'z']) 'f'
>True

Я понимаю необходимость скобок - т.е. синтаксис раздела. Но зачем нужны обратные ссылки?

Если я попытаюсь, я получаю:

(elem ['a'..'z']) 'f'

<interactive>:220:19:
    Couldn't match expected type `[[Char]]' with actual type `Char'
    In the second argument of `elem', namely 'f'
    In the expression: (elem ['a' .. 'z']) 'f'
    In an equation for `it': it = (elem ['a' .. 'z']) 'f'
4b9b3361

Ответ 1

В Haskell обратная сторона превращает имя в оператор инфикса:

a `elem` b = elem a b

Итак,

(`elem` b) a = (\x -> x `elem` b) a
             = a `elem` b
             = elem a b

В то время как

(elem b) a = elem b a