Hoogle Search
Within LTS Haskell 24.3 (ghc-9.10.2)
Note that Stackage only displays results for the latest LTS and Nightly snapshot. Learn more.
class PersistField a =>
PersistFieldSql apersistent Database.Persist.Sql Tells Persistent what database column type should be used to store a Haskell type.
Examples
Simple Boolean Alternative
data Switch = On | Off deriving (Show, Eq) instance PersistField Switch where toPersistValue s = case s of On -> PersistBool True Off -> PersistBool False fromPersistValue (PersistBool b) = if b then Right On else Right Off fromPersistValue x = Left $ "File.hs: When trying to deserialize a Switch: expected PersistBool, received: " <> T.pack (show x) instance PersistFieldSql Switch where sqlType _ = SqlBool
Non-Standard Database Types
If your database supports non-standard types, such as Postgres' uuid, you can use SqlOther to use them:import qualified Data.UUID as UUID instance PersistField UUID where toPersistValue = PersistLiteralEncoded . toASCIIBytes fromPersistValue (PersistLiteralEncoded uuid) = case fromASCIIBytes uuid of Nothing -> Left $ "Model/CustomTypes.hs: Failed to deserialize a UUID; received: " <> T.pack (show uuid) Just uuid' -> Right uuid' fromPersistValue x = Left $ "File.hs: When trying to deserialize a UUID: expected PersistLiteralEncoded, received: "-- > <> T.pack (show x) instance PersistFieldSql UUID where sqlType _ = SqlOther "uuid"
User Created Database Types
Similarly, some databases support creating custom types, e.g. Postgres' DOMAIN and ENUM features. You can use SqlOther to specify a custom type:CREATE DOMAIN ssn AS text CHECK ( value ~ '^[0-9]{9}$');
instance PersistFieldSQL SSN where sqlType _ = SqlOther "ssn"
CREATE TYPE rainbow_color AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet');
instance PersistFieldSQL RainbowColor where sqlType _ = SqlOther "rainbow_color"
-
persistent Database.Persist.Sql No documentation available.
newtype
PersistUnsafeMigrationException persistent Database.Persist.Sql.Migration An exception indicating that Persistent refused to run some unsafe migrations. Contains a list of pairs where the Bool tracks whether the migration was unsafe (True means unsafe), and the Sql is the sql statement for the migration.
PersistUnsafeMigrationException :: [(Bool, Sql)] -> PersistUnsafeMigrationExceptionpersistent Database.Persist.Sql.Migration No documentation available.
PersistArray :: [PersistValue] -> PersistValuepersistent Database.Persist.Types Intended especially for PostgreSQL backend for text arrays
PersistBool :: Bool -> PersistValuepersistent Database.Persist.Types No documentation available.
PersistByteString :: ByteString -> PersistValuepersistent Database.Persist.Types No documentation available.
PersistDay :: Day -> PersistValuepersistent Database.Persist.Types No documentation available.
pattern
PersistDbSpecific :: ByteString -> PersistValuepersistent Database.Persist.Types Deprecated: Deprecated since 2.11 because of inconsistent escaping behavior across backends. The Postgres backend escapes these values, while the MySQL backend does not. If you are using this, please switch to PersistLiteral_ and provide a relevant LiteralType for your conversion.
PersistDouble :: Double -> PersistValuepersistent Database.Persist.Types No documentation available.