{-# LANGUAGE CPP #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
-- |
-- Module:       $HEADER$
-- Description:  Default instances for (strict and lazy) Text and Text Builder.
-- Copyright:    (c) 2016, Peter Trško
-- License:      BSD3
--
-- Maintainer:   peter.trsko@gmail.com
-- Stability:    stable
-- Portability:  CPP, NoImplicitPrelude
--
-- 'Default' instances for (strict) 'Strict.Text', (lazy) 'Lazy.Text' and
-- 'Builder' from
-- <https://hackage.haskell.org/package/text text> package.
module Data.Default.Instances.Text
    ( -- $providedInstances
    )
  where

import Data.Monoid (Monoid(mempty))

import qualified Data.Text as Strict (Text)
import qualified Data.Text as Strict.Text (empty)
import qualified Data.Text.Lazy as Lazy (Text)
import qualified Data.Text.Lazy as Lazy.Text (empty)

#if MIN_VERSION_text(0,8,0)
-- Version 0.8.0.0 is the first that introduced Builder.
import Data.Text.Lazy.Builder (Builder)
#endif

import Data.Default.Class (Default(def))


-- | @'def' = 'Strict.Text.empty'@
instance Default Strict.Text where
    def = Strict.Text.empty
    {-# INLINE def #-}

-- | @'def' = 'Lazy.Text.empty'@
instance Default Lazy.Text where
    def = Lazy.Text.empty
    {-# INLINE def #-}

#if MIN_VERSION_text(0,8,0)
-- Version 0.8.0.0 is the first that introduced Builder.

-- | @'def' = 'mempty'@
instance Default Builder where
    -- Using mempty implies that we need dependency on base, other option would
    -- be to depend on internal module of text package. Considering the first
    -- option to be the lesser of two evils.
    def = mempty
    {-# INLINE def #-}
#endif


-- $providedInstances
--
-- Following instances are provided:
--
-- @
-- -- Strict Text:
-- instance 'Default' 'Strict.Text' where
--     'def' = 'Strict.Text.empty'
--
-- -- Lazy Text:
-- instance 'Default' 'Lazy.Text' where
--     'def' = 'Lazy.Text.empty'
-- @
--
-- Following instances are provided only for
-- <https://hackage.haskell.org/package/text text> >=0.8, since that it the
-- version that introduced 'Builder':
--
-- @
-- instance 'Default' 'Builder' where
--     'def' = 'mempty'
-- @