pattern matching of the form: Option{..} <-
haskell, pattern-matching
Solution
This is a GHC syntactic extension called record wildcards. Quoting documentation:
Record wildcard syntax permits a `".."` in a record pattern, where each elided field `f` is replaced by the pattern `f = f`.
So this code is equivalent to
Option { cabal = cabal, noStylish = noStylish } <- cmdArgs defOption
effectively binding name `x` to the value of record field named `x` for every field in the record type.
`<-` part is irrelevant here, you can as well write
let Option { .. } = some expression
Problem
What is this form of pattern matching called:`Option{..} <- ...`, e.g. as it is used here: ``` data Option = Option { cabal :: Maybe String , noStylish :: Bool } ... main = do Option{..} <- cmdArgs defOption cabp <- case cabal of Nothing -> do ... ``` It seems to redefine `cabal` and `nostylish`. Before the pattern match `cabal` has type `Option -> Maybe String` but after it has type `Maybe String`. This example comes from the recently uploaded package `cabal2ghci`.