{-# LANGUAGE OverloadedStrings #-}

{-|
Module:      TextShow.Utils
Copyright:   (C) 2014-2017 Ryan Scott
License:     BSD-style (see the file LICENSE)
Maintainer:  Ryan Scott
Stability:   Provisional
Portability: GHC

Miscellaneous utility functions.
-}
module TextShow.Utils (liftShowbUnaryWith, showbUnaryListWith) where

import TextShow (Builder, TextShow1(..), showbUnaryWith)

-- | This pattern is used frequently when showing transformer types.
liftShowbUnaryWith :: TextShow1 m
                   => (Int -> a -> Builder) -> ([a] -> Builder)
                   -> Builder -> Int -> m a -> Builder
liftShowbUnaryWith sp sl = showbUnaryWith (liftShowbPrec sp sl)
{-# INLINE liftShowbUnaryWith #-}

-- | This pattern is used frequently when showing container types.
showbUnaryListWith :: ([a] -> Builder) -> Int -> [a] -> Builder
showbUnaryListWith sl p = showbUnaryWith (const sl) "fromList" p
{-# INLINE showbUnaryListWith #-}