{-# LANGUAGE TemplateHaskell, DataKinds, PolyKinds, ScopedTypeVariables,
             TypeFamilies, TypeOperators, GADTs, UndecidableInstances,
             FlexibleContexts, DefaultSignatures #-}

-----------------------------------------------------------------------------
-- |
-- Module      :  Data.Promotion.Prelude.Bounded
-- Copyright   :  (C) 2014 Jan Stolarek
-- License     :  BSD-style (see LICENSE)
-- Maintainer  :  Jan Stolarek (jan.stolarek@p.lodz.pl)
-- Stability   :  experimental
-- Portability :  non-portable
--
-- Defines the promoted version of Bounded, 'PBounded'
--
-----------------------------------------------------------------------------

module Data.Promotion.Prelude.Bounded (
  PBounded(..),

  -- ** Defunctionalization symbols
  MaxBoundSym0,
  MinBoundSym0
  ) where

import Data.Singletons.Promote
import Data.Singletons.Util

$(promoteOnly [d|
  class Bounded a  where
    minBound, maxBound :: a
  |])

$(promoteBoundedInstances boundedBasicTypes)