pg-entity-0.0.2.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."
)