3 ms·
Does anyone know how multiple arguments work with lambda-case[1]? Is the solution just using a tuple and manually currying like so (suggested here[2])? curr
by dbaupp 14y ago
Does anyone know how multiple arguments work with lambda-case[1]? Is the solution just using a tuple and manually currying like so (suggested here[2])?
curry (\case (Nothing,_) -> ...)
(It seems like this would defeat the purpose of lambda-case for lambdas with more than 2 arguments, and it is awkward even for those with exactly 2 arguments.)
[1] http://www.haskell.org/ghc/docs/7.6.1/html/users_guide/syntax-extns.html#lambda-case http://www.haskell.org/ghc/docs/7.6.1/html/users_guide/synta...
[2] http://hackage.haskell.org/trac/ghc/wiki/LambdasVsPatternMatching http://hackage.haskell.org/trac/ghc/wiki/LambdasVsPatternMat...
- aristidb 14y agoYou can still do \a b -> case (a,b) of ...
- thesz 14y agoAnd, perhaps, use uncurry $ \case ...
- emillon 14y agoThe equivalent construct in OCaml is "function", and it suffers from the same limitation, and it's quite idiomatic to match on a tuple.
- JoshTriplett 14y agoYes, LambdaCase only supports one argument. That covers the most common cases, such as foo >>= \case ... See the discussions at http://hackage.haskell.org/trac/ghc/ticket/4359 http://hackage.haskell.org/trac/ghc/ticket/4359 and https://unknownparallel.wordpress.com/2012/07/09/the-long-and-epic-journey-of-lambdacase-2/ https://unknownparallel.wordpress.com/2012/07/09/the-long-an... for the history of this. Multi-argument lambda case proves quite difficult to handle sanely, because normal non-lambda case doesn't do multiple arguments, just tuples. Having multiple arguments requires separating the pattern for each argument somehow, a problem that doesn't come up for non-lambda cases.