Visitar URL original
Document mpsFieldLabelModifier with example by malteneuss · Pull Request #1587 · yesodweb/persistent · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions persistent/ChangeLog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Changelog for persistent

# 2.15.1.1 (unreleased)

* [#1587](https://github.com/yesodweb/persistent/pull/1587)
* Improve documentation of `mpsFieldLabelModifier`.

# 2.15.1.0

* [#1519](https://github.com/yesodweb/persistent/pull/1519/files/9865a295f4545d30e55aacb6efc25f27f758e8ad#diff-5af2883367baae8f7f266df6a89fc2d1defb7572d94ed069e05c8135a883bc45)
Expand Down
64 changes: 57 additions & 7 deletions persistent/Database/Persist/TH/Internal.hs
Original file line number Diff line number Diff line change
Expand Up @@ -1053,7 +1053,9 @@ fixEntityDef ued =
filter isHaskellUnboundField (unboundEntityFields ued)
}

-- | Settings to be passed to the 'mkPersist' function.
-- | Settings that can be passed to the 'mkPersist' (mps) function to control what code is generated.
-- This is (just) the data type definition, so you will most likely want to use and adapt concrete values
-- like 'sqlSettings'.
data MkPersistSettings = MkPersistSettings
{ mpsBackend :: Type
-- ^ Which database backend we\'re using. This type is used for the
Expand All @@ -1079,15 +1081,63 @@ data MkPersistSettings = MkPersistSettings
, mpsPrefixFields :: Bool
-- ^ Prefix field names with the model name. Default: True.
--
-- Note: this field is deprecated. Use the mpsFieldLabelModifier and
-- Note: this field is deprecated. Use the 'mpsFieldLabelModifier' and
-- 'mpsConstraintLabelModifier' instead.
, mpsFieldLabelModifier :: Text -> Text -> Text
-- ^ Customise the field accessors and lens names using the entity and field
-- name. Both arguments are upper cased.
-- ^ Customise the field names (and lens names) for generated entity data types.
--
-- Default: appends entity and field.
-- Default: appends entity name and field name, equivalent to
--
-- Note: this setting is ignored if mpsPrefixFields is set to False.
-- @
-- mpsFieldLabelModifier = \\entityName fieldName -> entityName <> fieldName
-- @
--
-- to avoid duplicate record field collisions.
--
-- For example, with default 'sqlSettings' and
--
-- @
-- 'mkPersistWith' 'sqlSettings' [] ['persistLowerCase'|
-- Person
-- name Text
-- age Int
-- |]
-- @
--
-- it will generate the entity data type
--
-- @
-- Person {
-- personName :: Text, -- generated field name
-- personAge :: Int -- generated field name
-- }
-- @
--
-- Note: this setting is ignored if the deprecated 'mpsPrefixFields' is set to False.
--
-- === __Example without entity name__
--
-- You may not want the entity name prefix for all fields, so use
--
-- @
-- 'mkPersistWith' ('sqlSettings' { mpsFieldLabelModifier = \\\_entityName fieldName -> fieldName }) [] ['persistLowerCase'|
-- Person
-- name Text
-- age Int
-- |]
-- @
--
-- instead. This will generate the entity data type
--
-- @
-- Person {
-- name :: Text,
-- age :: Int
-- }
-- @
--
-- When you have multiple entites with the same field name, you might need to
-- add @{-# LANGUAGE DuplicateRecordFields #-}@ for your code to compile.
--
-- @since 2.11.0.0
, mpsAvoidHsKeyword :: Text -> Text
Expand All @@ -1102,7 +1152,7 @@ data MkPersistSettings = MkPersistSettings
--
-- Default: appends entity and field
--
-- Note: this setting is ignored if mpsPrefixFields is set to False.
-- Note: this setting is ignored if the deprecated 'mpsPrefixFields' is set to False.
--
-- @since 2.11.0.0
, mpsEntityHaddocks :: Bool
Expand Down