In Haskell, I often do something like this:
f $ \x -> case x of
A a1 a2 -> ...
B b1 b2 -> ...
C c1 c2 -> ...
But I don't want x
, I just want to deconstruct it.
In Standard ML I can do something like this:
f (fn A(a1,a2) => ...
| B(b1,b2) => ...
| C(c1,c2) => ...)
Is there a way to do this in Haskell or with any GHC extensions?
A special feature of languages in the ML family is pattern matching. It allows simple access to the components of complex data structures. A function definition most often corresponds to pattern matching over one of its parameters, allowing the function to be defined by cases.
You can only pattern-match on data constructors, and ++ is a function, not a data constructor. Data constructors are persistent; a value like 'c':[] cannot be simplified further, because it is a fundamental value of type [Char] .
You can use the LambdaCase language extension and perform
{-# LANGUAGE LambdaCase #-}
...
f $ \case
A a1 a2 ->
...
as per your example.
You can read more about it in GHC's documentation
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With