Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Use -XRecordWildCards
safely.
Documentation
fields :: Name -> PatQ Source #
Put all fields of a record constructor into scope.
f $(fields 'Rec) = ...
is equivalent to f Rec{..}
, but the compiler
will warn you about all unused fields. Thus fields
brings compile-time
safety whenever you want to guarantee that a certain function uses all
fields of Rec
.
To explicitly ignore a field, match it against _
:
f $(fields 'Rec) = ... where -- Ignored fields _ = (recUselessField1, recUselessField2)
Usage examples include ToJSON
instances and various encoders in
general:
instance ToJSON Rec where toJSON $(fields 'Rec) = ...
Note: if you want to define the data type and use fields
in the
same module, you will need to add $(pure [])
after the type
declaration. See the post about declaration groups
for more details. Your code will look like this:
data Rec = ... $(pure []) f $(fields 'Rec) = ...
fieldsPrefixed :: String -> Name -> PatQ Source #
Like fields
, but prefixes all fields with the given prefix.
Useful if you need to put fields from more than one record into scope:
diff :: Rec -> Rec -> Text diff $(fieldsPrefixed "a_" 'Rec) $(fieldsPrefixed "b_" 'Rec) = ...
fieldsNamed :: (String -> String) -> Name -> PatQ Source #
General form of fields
and fieldsPrefixed
.