2015-02-23 5 views
11

В Haskell, я часто делаю что-то вроде этого:Образец матча в привязке лямбда?

f $ \x -> case x of 
      A a1 a2 -> ... 
      B b1 b2 -> ... 
      C c1 c2 -> ... 

Но я не хочу x, я просто хочу, чтобы разрушить его.

В Standard ML я могу сделать что-то вроде этого:

f (fn A(a1,a2) => ... 
    | B(b1,b2) => ... 
    | C(c1,c2) => ...) 

Есть ли способ сделать это в Haskell или с любыми расширениями GHC?

ответ

19

Вы можете использовать расширение языка LambdaCase и выполнять

{-# LANGUAGE LambdaCase #-} 
... 
f $ \case 
    A a1 a2 -> 
... 

согласно вашему примеру.

Вы можете прочитать больше об этом in GHC's documentation

+0

слово, которое я только что просмотрел 7-й главе руководства, прежде чем сделать этот вопрос, и я должен пропустил эту CuS я слишком гангста! –

Смежные вопросы