Haskell Lambda Case Or



有没有一种方法可以用逻辑运算符编写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 ==))

最新更新