模式匹配lambda的绑定?

og_*_*loc 11 haskell sml pattern-matching

在Haskell中,我经常做这样的事情:

f $ \x -> case x of
            A a1 a2 -> ...
            B b1 b2 -> ...
            C c1 c2 -> ...
Run Code Online (Sandbox Code Playgroud)

但我不想要x,我只想解构它.

在标准ML中,我可以这样做:

f (fn A(a1,a2) => ...
    | B(b1,b2) => ...
    | C(c1,c2) => ...)
Run Code Online (Sandbox Code Playgroud)

有没有办法在Haskell或任何GHC扩展中执行此操作?

Arn*_*non 19

您可以使用LambdaCase语言扩展并执行

{-# LANGUAGE LambdaCase #-}
... 
f $ \case 
     A a1 a2 ->
...
Run Code Online (Sandbox Code Playgroud)

按照你的例子.

您可以在GHC的文档中阅读更多相关信息