Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- enumMapper :: String -> (String -> Maybe haskellSum) -> (haskellSum -> String) -> EnumMapper sqlEnum haskellSum
- data EnumMapper sqlEnum haskellSum
- enumFromField :: EnumMapper sqlEnum haskellSum -> FromField sqlEnum haskellSum
- enumToFields :: EnumMapper sqlEnum haskellSum -> ToFields haskellSum (Column sqlEnum)
- fromFieldToFieldsEnum :: String -> (String -> Maybe haskellSum) -> (haskellSum -> String) -> (FromField sqlEnum haskellSum, ToFields haskellSum (Column sqlEnum))
Documentation
:: String | The name of the |
-> (String -> Maybe haskellSum) | A function which converts from the string representation of the ENUM field |
-> (haskellSum -> String) | A function which converts to the string representation of the ENUM field |
-> EnumMapper sqlEnum haskellSum | The |
Create a mapping between a Postgres ENUM
type and a Haskell
type. Also works for DOMAIN
types. For example, if you have the
following ENUM
CREATE TYPE public.mpaa_rating AS ENUM ( 'G', 'PG', 'PG-13', 'R', 'NC-17' );
then you can define data types to represent the enum on the SQL side and Haskell side respectively
data SqlRating data Rating = G | PG | PG13 | R | NC17 deriving Show
and functions to map between them
toSqlRatingString :: Rating -> String toSqlRatingString r = case r of G -> "G" PG -> "PG" PG13 -> "PG-13" R -> "R" NC17 -> "NC-17" fromSqlRatingString :: String -> Maybe Rating fromSqlRatingString s = case s of "G" -> Just G "PG" -> Just PG "PG-13" -> Just PG13 "R" -> Just R "NC-17" -> Just NC17 _ -> Nothing
Then you can use the mappings as follows
import qualified Opaleye as O import qualified Data.Profunctor.Product.Default as D sqlRatingMapper :: EnumMapper SqlRating Rating sqlRatingMapper = enumMapper "mpaa_rating" fromSqlRatingString toSqlRatingString instance O.DefaultFromField SqlRating Rating where defaultFromField = enumFromField sqlRatingMapper instance rating ~ Rating => D.Default (Inferrable O.FromFields) (O.Column SqlRating) rating where def = Inferrable D.def instance D.Default O.ToFields Rating (O.Column SqlRating) where def = enumToFields sqlRatingMapper
data EnumMapper sqlEnum haskellSum Source #
enumFromField :: EnumMapper sqlEnum haskellSum -> FromField sqlEnum haskellSum Source #
enumToFields :: EnumMapper sqlEnum haskellSum -> ToFields haskellSum (Column sqlEnum) Source #