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"
Instances37PersistFieldSql, …
PersistFieldSql HtmlDefined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql ByteStringDefined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql Int16Defined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql Int32Defined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql Int64Defined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql Int8Defined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql RationalDefined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql Word16Defined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql Word32Defined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql Word64Defined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql Word8Defined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql BoolDefined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql DoubleDefined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql IntDefined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql WordDefined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql OverflowNaturalDefined in persistent-2.14.6.3 · Database.Persist.Sql.ClassThis type uses the SqlInt64 version, which will exhibit overflow and underflow behavior. Additionally, it permits negative values in the database, which isn't ideal.
PersistFieldSql PersistValueDefined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql CheckmarkDefined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql TextDefined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql TextDefined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql DayDefined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql UTCTimeDefined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql TimeOfDayDefined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql (BackendKey SqlReadBackend)Defined in persistent-2.14.6.3 · Database.Persist.Sql.Orphan.PersistStore · orphanPersistFieldSql (BackendKey SqlWriteBackend)Defined in persistent-2.14.6.3 · Database.Persist.Sql.Orphan.PersistStore · orphanPersistFieldSql (BackendKey SqlBackend)Defined in persistent-2.14.6.3 · Database.Persist.Sql.Orphan.PersistStore · orphanPersistFieldSql [Char]Defined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql a => PersistFieldSql (Maybe a)Defined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql a => PersistFieldSql (Vector a)Defined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql a => PersistFieldSql [a]Defined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql v => PersistFieldSql (IntMap v)Defined in persistent-2.14.6.3 · Database.Persist.Sql.Class(Ord a, PersistFieldSql a) => PersistFieldSql (Set a)Defined in persistent-2.14.6.3 · Database.Persist.Sql.Class(PersistField record, PersistEntity record) => PersistFieldSql (Entity record)Defined in persistent-2.14.6.3 · Database.Persist.Sql.Class(BackendCompatible b s, PersistFieldSql (BackendKey b)) => PersistFieldSql (BackendKey (Compatible b s))Defined in persistent-2.14.6.3 · Database.Persist.Compatible.TypesHasResolution a => PersistFieldSql (Fixed a)Defined in persistent-2.14.6.3 · Database.Persist.Sql.ClassPersistFieldSql v => PersistFieldSql (Map Text v)Defined in persistent-2.14.6.3 · Database.Persist.Sql.Class(PersistFieldSql a, PersistFieldSql b) => PersistFieldSql (a, b)Defined in persistent-2.14.6.3 · Database.Persist.Sql.Class