{-# LANGUAGE CPP #-}
{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS -fno-warn-orphans #-}
{-|
Module: TextShow.Data.Containers
Copyright: (C) 2014-2015 Ryan Scott
License: BSD-style (see the file LICENSE)
Maintainer: Ryan Scott
Stability: Provisional
Portability: GHC
Monomorphic 'TextShow' functions for data types in the @containers@ library.
/Since: 2/
-}
module TextShow.Data.Containers (
liftShowbIntMapPrec
, showbIntSetPrec
, liftShowbMapPrec2
, liftShowbSequencePrec
, liftShowbViewLPrec
, liftShowbViewRPrec
, liftShowbSetPrec
, liftShowbTreePrec
) where
import qualified Data.Foldable as F
import qualified Data.IntMap as IM
import Data.IntMap (IntMap)
import qualified Data.IntSet as IS
import Data.IntSet (IntSet)
import qualified Data.Map as M
import Data.Map (Map)
import Data.Sequence (Seq, ViewL, ViewR)
import qualified Data.Set as Set
import Data.Set (Set)
import Data.Tree (Tree)
import TextShow (TextShow(..), TextShow1(..), TextShow2(..),
Builder, showbPrec1)
import TextShow.Data.Integral ()
import TextShow.TH (deriveTextShow, deriveTextShow1)
import TextShow.Utils (showbUnaryListWith)
#include "inline.h"
-- | Convert an 'IntMap' to a 'Builder' with the given show function and precedence.
--
-- /Since: 3/
liftShowbIntMapPrec :: (v -> Builder) -> Int -> IntMap v -> Builder
liftShowbIntMapPrec sp p =
showbUnaryListWith (liftShowbList2 showbPrec undefined
(const sp) undefined) p . IM.toList
{-# INLINE liftShowbIntMapPrec #-}
-- | Convert an 'IntSet' to a 'Builder' with the given precedence.
--
-- /Since: 2/
showbIntSetPrec :: Int -> IntSet -> Builder
showbIntSetPrec p = showbUnaryListWith showbList p . IS.toList
{-# INLINE showbIntSetPrec #-}
-- | Convert a 'Map' to a 'Builder' with the given show functions and precedence.
--
-- /Since: 3/
liftShowbMapPrec2 :: (k -> Builder) -> (v -> Builder) -> Int -> Map k v -> Builder
liftShowbMapPrec2 sp1 sp2 p =
showbUnaryListWith (liftShowbList2 (const sp1) undefined
(const sp2) undefined) p . M.toList
{-# INLINE liftShowbMapPrec2 #-}
-- | Convert a 'Sequence' to a 'Builder' with the given show function and precedence.
--
-- /Since: 3/
liftShowbSequencePrec :: ([a] -> Builder) -> Int -> Seq a -> Builder
liftShowbSequencePrec sl p = showbUnaryListWith sl p . F.toList
{-# INLINE liftShowbSequencePrec #-}
-- | Convert a 'ViewL' value to a 'Builder' with the given show function and precedence.
--
-- /Since: 3/
liftShowbViewLPrec :: (Int -> a -> Builder) -> ([a] -> Builder)
-> Int -> ViewL a -> Builder
liftShowbViewLPrec = liftShowbPrec
{-# INLINE liftShowbViewLPrec #-}
-- | Convert a 'ViewR' value to a 'Builder' with the given show function and precedence.
--
-- /Since: 3/
liftShowbViewRPrec :: (Int -> a -> Builder) -> ([a] -> Builder)
-> Int -> ViewR a -> Builder
liftShowbViewRPrec = liftShowbPrec
{-# INLINE liftShowbViewRPrec #-}
-- | Convert a 'Set' to a 'Builder' with the given show function and precedence.
--
-- /Since: 3/
liftShowbSetPrec :: ([a] -> Builder) -> Int -> Set a -> Builder
liftShowbSetPrec sl p = showbUnaryListWith sl p . Set.toList
{-# INLINE liftShowbSetPrec #-}
-- | Convert a 'Tree' to a 'Builder' with the given show functions and precedence.
--
-- /Since: 3/
liftShowbTreePrec :: (Int -> a -> Builder) -> ([a] -> Builder)
-> Int -> Tree a -> Builder
liftShowbTreePrec = liftShowbPrec
{-# INLINE liftShowbTreePrec #-}
instance TextShow v => TextShow (IntMap v) where
showbPrec = showbPrec1
INLINE_INST_FUN(showbPrec)
instance TextShow1 IntMap where
liftShowbPrec sp _ = liftShowbIntMapPrec (sp 0)
INLINE_INST_FUN(liftShowbPrec)
instance TextShow IntSet where
showbPrec = showbIntSetPrec
INLINE_INST_FUN(showbPrec)
instance (TextShow k, TextShow v) => TextShow (Map k v) where
showbPrec = showbPrec1
INLINE_INST_FUN(showbPrec)
instance TextShow k => TextShow1 (Map k) where
liftShowbPrec = liftShowbPrec2 showbPrec showbList
INLINE_INST_FUN(liftShowbPrec)
instance TextShow2 Map where
liftShowbPrec2 sp1 _ sp2 _ = liftShowbMapPrec2 (sp1 0) (sp2 0)
INLINE_INST_FUN(liftShowbPrec2)
instance TextShow a => TextShow (Seq a) where
showbPrec = showbPrec1
INLINE_INST_FUN(showbPrec)
instance TextShow1 Seq where
liftShowbPrec _ = liftShowbSequencePrec
INLINE_INST_FUN(liftShowbPrec)
$(deriveTextShow ''ViewL)
$(deriveTextShow1 ''ViewL)
$(deriveTextShow ''ViewR)
$(deriveTextShow1 ''ViewR)
instance TextShow a => TextShow (Set a) where
showbPrec = showbPrec1
INLINE_INST_FUN(showbPrec)
instance TextShow1 Set where
liftShowbPrec _ = liftShowbSetPrec
INLINE_INST_FUN(liftShowbPrec)
$(deriveTextShow ''Tree)
$(deriveTextShow1 ''Tree)