手动定义布尔连接

fre*_*low 8 haskell boolean operators pattern-matching

在Erik Meijer关于功能编程基础知识的第4章中,他基本上写道:

True  &&& x | x == True  = True
            | x == False = False
Run Code Online (Sandbox Code Playgroud)

这不必要地冗长吗?我不能写:

True  &&& x = x
Run Code Online (Sandbox Code Playgroud)

甚至:

(&&&) True  = id

(&&&) False = const False          
Run Code Online (Sandbox Code Playgroud)

顺便问一下,为什么我不能写下面的内容?

(True  &&&) = id

(False &&&) = const False          
Run Code Online (Sandbox Code Playgroud)

ghci响应:

Parse error in pattern: True &&&
Run Code Online (Sandbox Code Playgroud)

aug*_*tss 12

是的,你定义它的方式更好.来自序曲:

True  && x = x
False && _ = False
Run Code Online (Sandbox Code Playgroud)

您只能在表达式中使用节,而不能在模式中使用.没有深刻的理由(True &&)不允许在一个模式中被允许.但是,这是一件非常罕见的事情,我认为这不值得复杂化.