pg-entity-0.0.1.0: src/Database/PostgreSQL/Entity/Internal/Unsafe.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-|
Module : Database.PostgreSQL.Entity.Internal.Unsafe
Copyright : © Clément Delafargue, 2018
Théophile Choutri, 2021
Koz Ross, 2021
License : MIT
Maintainer : theophile@choutri.eu
Stability : Experimental
Contains the internals of several key types.
= Note
By using these directly, you run the risk of violating internal invariants,
or making representational changes in incompatible ways. This API is not
stable, and is not subject to the PVP. Use at your own risk
If at all possible, instead use the API provided by
'Database.PostgreSQL.Entity.Types'.
-}
module Database.PostgreSQL.Entity.Internal.Unsafe
(
Field (..)
) where
import Data.Kind
import Data.String
import Data.Text (Text)
import GHC.TypeLits
-- | A wrapper for table fields.
--
-- @since 0.0.1.0
data Field
= Field Text (Maybe Text)
deriving stock (Eq, Show)
{-| Using the Overloaded String syntax for Field names is forbidden.
-}
instance ForbiddenIsString => IsString Field where
fromString = error "You cannot pass a field as a string. Please use the `field` quasi-quoter instead."
type family ForbiddenIsString :: Constraint where
ForbiddenIsString = TypeError
( 'Text "🚫 You cannot pass a Field name as a string." ':$$:
'Text "Please use the `field` quasi-quoter instead."
)