module TextShow.Data.Containers (
showbIntMapPrecWith
, showbIntSetPrec
, showbMapPrecWith2
, showbSequencePrec
, showbSequencePrecWith
, showbViewLPrec
, showbViewLPrecWith
, showbViewRPrec
, showbViewRPrecWith
, showbSetPrec
, showbSetPrecWith
, showbTreePrec
, showbTreePrecWith
) 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(showb, showbPrec), TextShow1(..), TextShow2(..),
Builder, showbPrec1)
import TextShow.Data.Integral ()
import TextShow.Data.Tuple (showb2TupleWith2)
import TextShow.TH (deriveTextShow, deriveTextShow1)
import TextShow.Utils (showbUnaryList, showbUnaryListWith)
#include "inline.h"
showbIntMapPrecWith :: (v -> Builder) -> Int -> IntMap v -> Builder
showbIntMapPrecWith sp p = showbUnaryListWith (showb2TupleWith2 showb sp) p . IM.toList
showbIntSetPrec :: Int -> IntSet -> Builder
showbIntSetPrec p = showbUnaryListWith showb p . IS.toList
showbMapPrecWith2 :: (k -> Builder) -> (v -> Builder) -> Int -> Map k v -> Builder
showbMapPrecWith2 sp1 sp2 p = showbUnaryListWith (showb2TupleWith2 sp1 sp2) p . M.toList
showbSequencePrec :: TextShow a => Int -> Seq a -> Builder
showbSequencePrec p = showbUnaryList p . F.toList
showbSequencePrecWith :: (a -> Builder) -> Int -> Seq a -> Builder
showbSequencePrecWith sp p = showbUnaryListWith sp p . F.toList
showbViewLPrec :: TextShow a => Int -> ViewL a -> Builder
showbViewLPrec = showbPrec
showbViewLPrecWith :: (a -> Builder) -> Int -> ViewL a -> Builder
showbViewLPrecWith sp = showbPrecWith $ const sp
showbViewRPrec :: TextShow a => Int -> ViewR a -> Builder
showbViewRPrec = showbPrec
showbViewRPrecWith :: (a -> Builder) -> Int -> ViewR a -> Builder
showbViewRPrecWith sp = showbPrecWith $ const sp
showbSetPrec :: TextShow a => Int -> Set a -> Builder
showbSetPrec p = showbUnaryList p . Set.toList
showbSetPrecWith :: (a -> Builder) -> Int -> Set a -> Builder
showbSetPrecWith sp p = showbUnaryListWith sp p . Set.toList
showbTreePrec :: TextShow a => Int -> Tree a -> Builder
showbTreePrec = showbPrec
showbTreePrecWith :: (a -> Builder) -> Int -> Tree a -> Builder
showbTreePrecWith sp = showbPrecWith $ const sp
instance TextShow v => TextShow (IntMap v) where
showbPrec = showbPrec1
INLINE_INST_FUN(showbPrec)
instance TextShow1 IntMap where
showbPrecWith sp = showbIntMapPrecWith $ sp 0
INLINE_INST_FUN(showbPrecWith)
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
showbPrecWith = showbPrecWith2 showbPrec
INLINE_INST_FUN(showbPrecWith)
instance TextShow2 Map where
showbPrecWith2 sp1 sp2 = showbMapPrecWith2 (sp1 0) (sp2 0)
INLINE_INST_FUN(showbPrecWith2)
instance TextShow a => TextShow (Seq a) where
showbPrec = showbSequencePrec
INLINE_INST_FUN(showbPrec)
instance TextShow1 Seq where
showbPrecWith sp = showbSequencePrecWith $ sp 0
INLINE_INST_FUN(showbPrecWith)
$(deriveTextShow ''ViewL)
$(deriveTextShow1 ''ViewL)
$(deriveTextShow ''ViewR)
$(deriveTextShow1 ''ViewR)
instance TextShow a => TextShow (Set a) where
showbPrec = showbSetPrec
INLINE_INST_FUN(showbPrec)
instance TextShow1 Set where
showbPrecWith sp = showbSetPrecWith $ sp 0
INLINE_INST_FUN(showbPrecWith)
$(deriveTextShow ''Tree)
$(deriveTextShow1 ''Tree)