relational-query-0.0.1.0: src/Database/Relational/Query/Scalar.hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE FlexibleInstances #-}
-- |
-- Module : Database.Relational.Query.Scalar
-- Copyright : 2013 Kei Hibino
-- License : BSD3
--
-- Maintainer : ex8k.hibino@gmail.com
-- Stability : experimental
-- Portability : unknown
--
-- This module defines type classes and templates for scalar queries.
module Database.Relational.Query.Scalar (
-- * Single degree constraint
ScalarDegree, defineScalarDegree
) where
import Language.Haskell.TH (Q, TypeQ, Dec)
import Database.Record (PersistableWidth)
-- | Constraint which represents scalar degree.
class PersistableWidth ct => ScalarDegree ct
instance ScalarDegree ct => ScalarDegree (Maybe ct)
-- | 'ScalarDegree' instance templates.
defineScalarDegree :: TypeQ -> Q [Dec]
defineScalarDegree typeCon = do
[d| instance ScalarDegree $(typeCon) |]