2015-02-23 17 views
11

Trong Haskell, tôi thường làm một cái gì đó như thế này:Khớp mẫu trong ràng buộc của lambda?

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

Nhưng tôi không muốn x, tôi chỉ muốn mổ xẻ nó.

Trong Standard ML tôi có thể làm một cái gì đó như thế này:

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

Có cách nào để làm điều này trong Haskell hoặc với bất kỳ phần mở rộng GHC?

Trả lời

19

Bạn có thể sử dụng phần mở rộng ngôn ngữ LambdaCase và thực hiện

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

theo ví dụ của bạn.

Bạn có thể đọc thêm về nó in GHC's documentation

+0

từ Tôi chỉ cuộn qua chương 7 của cuốn cẩm nang trước khi đưa ra câu hỏi và tôi phải bỏ lỡ của cus này tôi quá gangsta! –

Các vấn đề liên quan