有没有一种方法可以用逻辑运算符编写Lambdacase:
case
(MyDataConstructor1) || (MyDataConstructor2) -> MyFunc1
ohterwise -> MyFunc2
不,Haskellcase
表达式不允许在一个分支上使用多个模式,这与OCaml或F#等其他ML语言不同。你必须分别列出两种模式:
case
MyDataConstructor1 -> MyFunc1
MyDataConstructor2 -> MyFunc1
_ -> MyFunc2
还要注意最后一种情况中的下划线:不应该在那个位置使用otherwise
,因为otherwise
不是一个特殊的语言结构,而只是标准前奏曲中True
的别名。因此,虽然您的示例在技术上是可行的(通过将大小写的值绑定到名称otherwise
(,但读者不会很清楚,而且还会产生名称隐藏警告。
为什么需要使用Lambdacase。。?你可以像一样直接操作
val -> case val == MDC1 || val == MDC2 of
True -> "wow"
_ -> "duh"
或者通过使用Data中的CCD_ 6函数。Bool
val -> bool "duh" "wow" (val == MDC1 || val == MDC2)
那么即使没有类似λ的
bool "duh" "wow" . ((||) <$> (MDC1 ==) <*> (MDC2 ==))