A collection type that can be converted from a sequence of fields. Instances are provided for tuples up to 10 elements and lists of any length.
Note that instances can be defined outside of postgresql-simple, which is often useful. For example, here's an instance for a user-defined pair:
data User = User { name :: String, fileQuota :: Int }
instance FromRow User where
fromRow = User <$> field <*> field
The number of calls to field must match the number of fields returned in a single row of the query result. Otherwise, a ConversionFailed exception will be thrown.
You can also derive FromRow for your data type using GHC generics, like this:
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
import GHC.Generics (Generic)
import Database.PostgreSQL.Simple (FromRow)
data User = User { name :: String, fileQuota :: Int }
deriving (Generic, FromRow)
Note that this only works for product types (e.g. records) and does not support sum types or recursive types.
Note that field evaluates its result to WHNF, so the caveats listed in mysql-simple and very early versions of postgresql-simple no longer apply. Instead, look at the caveats associated with user-defined implementations of fromField.
Instances45FromRow, …
FromField a => FromRow (Only a)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRowFromField a => FromRow (Maybe (Only a))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRowFromField a => FromRow (Maybe (Vector a))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRowFromField a => FromRow (Maybe [a])Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRowFromField a => FromRow (Vector a)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRowFromField a => FromRow [a]Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b) => FromRow (Maybe (a, b))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c) => FromRow (Maybe (a, b, c))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d) => FromRow (Maybe (a, b, c, d))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e) => FromRow (Maybe (a, b, c, d, e))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f) => FromRow (Maybe (a, b, c, d, e, f))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g) => FromRow (Maybe (a, b, c, d, e, f, g))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h) => FromRow (Maybe (a, b, c, d, e, f, g, h))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i) => FromRow (Maybe (a, b, c, d, e, f, g, h, i))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j) => FromRow (Maybe (a, b, c, d, e, f, g, h, i, j))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k) => FromRow (Maybe (a, b, c, d, e, f, g, h, i, j, k))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l) => FromRow (Maybe (a, b, c, d, e, f, g, h, i, j, k, l))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m) => FromRow (Maybe (a, b, c, d, e, f, g, h, i, j, k, l, m))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m, FromField n) => FromRow (Maybe (a, b, c, d, e, f, g, h, i, j, k, l, m, n))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m, FromField n, FromField o) => FromRow (Maybe (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m, FromField n, FromField o, FromField p) => FromRow (Maybe (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m, FromField n, FromField o, FromField p, FromField q) => FromRow (Maybe (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m, FromField n, FromField o, FromField p, FromField q, FromField r) => FromRow (Maybe (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m, FromField n, FromField o, FromField p, FromField q, FromField r, FromField s) => FromRow (Maybe (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m, FromField n, FromField o, FromField p, FromField q, FromField r, FromField s, FromField t) => FromRow (Maybe (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t))Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b) => FromRow (a, b)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromRow a, FromRow b) => FromRow (a :. b)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c) => FromRow (a, b, c)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d) => FromRow (a, b, c, d)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e) => FromRow (a, b, c, d, e)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f) => FromRow (a, b, c, d, e, f)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g) => FromRow (a, b, c, d, e, f, g)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h) => FromRow (a, b, c, d, e, f, g, h)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i) => FromRow (a, b, c, d, e, f, g, h, i)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j) => FromRow (a, b, c, d, e, f, g, h, i, j)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k) => FromRow (a, b, c, d, e, f, g, h, i, j, k)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l) => FromRow (a, b, c, d, e, f, g, h, i, j, k, l)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m) => FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m, FromField n) => FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m, FromField n, FromField o) => FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m, FromField n, FromField o, FromField p) => FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m, FromField n, FromField o, FromField p, FromField q) => FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m, FromField n, FromField o, FromField p, FromField q, FromField r) => FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m, FromField n, FromField o, FromField p, FromField q, FromField r, FromField s) => FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j, FromField k, FromField l, FromField m, FromField n, FromField o, FromField p, FromField q, FromField r, FromField s, FromField t) => FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t)Defined in postgresql-simple-0.7.0.0 · Database.PostgreSQL.Simple.FromRow