{-# LANGUAGE CPP #-}

-- |
-- Module      : Language.Haskell.TH.Compat.Bang
-- Copyright   : 2019 Kei Hibino
-- License     : BSD3
--
-- Maintainer  : ex8k.hibino@gmail.com
-- Stability   : experimental
-- Portability : unknown
--
-- This module provides compatibility definitions of
-- bang-type template for before temaplate-haskell-2.10
module Language.Haskell.TH.Compat.Bang (
  -- * Compat type constructors
  Bang, BangQ,
  BangType, BangTypeQ,
  VarBangType, VarBangTypeQ,

  SourceUnpackedness (NoSourceUnpackedness, SourceNoUnpack, SourceUnpack),
  SourceUnpackednessQ,
  SourceStrictness (NoSourceStrictness, SourceLazy, SourceStrict),
  SourceStrictnessQ,

  -- * Compat functions
  bang, bangType, varBangType,

  noSourceUnpackedness, sourceNoUnpack, sourceUnpack,
  noSourceStrictness, sourceLazy, sourceStrict,
  ) where

#if MIN_VERSION_template_haskell(2,11,0)
import Language.Haskell.TH.Compat.Bang.Current
#else
import Language.Haskell.TH.Compat.Bang.V210
#endif