safe-wild-cards- Use RecordWildCards safely
Safe HaskellSafe-Inferred



Use -XRecordWildCards safely.



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) = ...
    -- 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.