Ответ 1
Вы можете использовать расширение языка LambdaCase и выполнить
{-# LANGUAGE LambdaCase #-}
...
f $ \case
A a1 a2 ->
...
в соответствии с вашим примером.
Подробнее об этом можно узнать в документации GHC
В 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 ->
...
в соответствии с вашим примером.
Подробнее об этом можно узнать в документации GHC