| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
SafeWildCards
Description
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.