ручное определение логического соединения - PullRequest
8 голосов
/ 28 августа 2011

В главе 4 Эрика Мейера об основах функционального программирования он, по сути, пишет:

True  &&& x | x == True  = True
            | x == False = False

Разве это не излишне многословно? Разве я не могу просто написать:

True  &&& x = x

или даже:

(&&&) True  = id

(&&&) False = const False          

Кстати, почему я не могу написать следующее?

(True  &&&) = id

(False &&&) = const False          

ghci отвечает:

Parse error in pattern: True &&&

1 Ответ

12 голосов
/ 28 августа 2011

Да, как вы определяете это лучше.Из Prelude:

True  && x = x
False && _ = False

Вы можете использовать только разделы в выражениях, но не в шаблонах.Нет никакой глубокой причины, почему (True &&) не должно быть разрешено в шаблоне.Но так редко хочется хотеть, что я не думаю, что оно того стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...