lambda 绑定中的模式匹配?
Pattern match in binding of lambda?
在Haskell,我经常做这样的事情:
f $ \x -> case x of
A a1 a2 -> ...
B b1 b2 -> ...
C c1 c2 -> ...
但是我不想x
,我只想解构它
在标准 ML 中,我可以这样做:
f (fn A(a1,a2) => ...
| B(b1,b2) => ...
| C(c1,c2) => ...)
有没有办法在 Haskell 或任何 GHC 扩展中做到这一点?
您可以使用 LambdaCase 语言扩展并执行
{-# LANGUAGE LambdaCase #-}
...
f $ \case
A a1 a2 ->
...
按照你的例子。
您可以阅读更多相关信息in GHC's documentation
在Haskell,我经常做这样的事情:
f $ \x -> case x of
A a1 a2 -> ...
B b1 b2 -> ...
C c1 c2 -> ...
但是我不想x
,我只想解构它
在标准 ML 中,我可以这样做:
f (fn A(a1,a2) => ...
| B(b1,b2) => ...
| C(c1,c2) => ...)
有没有办法在 Haskell 或任何 GHC 扩展中做到这一点?
您可以使用 LambdaCase 语言扩展并执行
{-# LANGUAGE LambdaCase #-}
...
f $ \case
A a1 a2 ->
...
按照你的例子。
您可以阅读更多相关信息in GHC's documentation