{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} {-# OPTIONS_GHC -fno-warn-orphans #-} {-| Module: TextShow.Data.Functor.Trans Copyright: (C) 2014-2015 Ryan Scott License: BSD-style (see the file LICENSE) Maintainer: Ryan Scott Stability: Provisional Portability: GHC Monomorphic 'TextShow' functions for functor transformers. Note that an instance for the 'Identity' transformer is found in @text-show@, since it is a part of @base-4.8.0.0@ and later. /Since: 2/ -} module TextShow.Data.Functor.Trans ( showbComposePrecWith , showbConstantPrecWith , showbProductPrecWith , showbReversePrecWith , showbSumPrecWith ) where import Data.Functor.Compose (Compose(..)) import Data.Functor.Constant (Constant(..)) import Data.Functor.Product (Product(..)) import Data.Functor.Reverse (Reverse(..)) import Data.Functor.Sum (Sum(..)) import TextShow (TextShow(showbPrec), TextShow1(..), TextShow2(..), Builder, showbPrec1, showbUnaryWith, showbBinaryWith) #include "inline.h" -- | Convert a 'Compose' value to a 'Builder' with the given show function -- and precedence. -- -- /Since: 2/ showbComposePrecWith :: (TextShow1 f, TextShow1 g) => (Int -> a -> Builder) -> Int -> Compose f g a -> Builder showbComposePrecWith sp p (Compose x) = showbUnaryWith (showbPrecWith (showbPrecWith sp)) "Compose" p x {-# INLINE showbComposePrecWith #-} -- | Convert a 'Constant' value to a 'Builder' with the given show function -- and precedence. -- -- /Since: 2/ showbConstantPrecWith :: (Int -> a -> Builder) -> Int -> Constant a b -> Builder showbConstantPrecWith sp p (Constant x) = showbUnaryWith sp "Constant" p x {-# INLINE showbConstantPrecWith #-} -- | Convert a 'Product' value to a 'Builder' with the given show function -- and precedence. -- -- /Since: 2/ showbProductPrecWith :: (TextShow1 f, TextShow1 g) => (Int -> a -> Builder) -> Int -> Product f g a -> Builder showbProductPrecWith sp p (Pair x y) = showbBinaryWith (showbPrecWith sp) (showbPrecWith sp) "Pair" p x y {-# INLINE showbProductPrecWith #-} -- | Convert a 'Reverse' value to a 'Builder' with the given show function -- and precedence. -- -- /Since: 2/ showbReversePrecWith :: TextShow1 f => (Int -> a -> Builder) -> Int -> Reverse f a -> Builder showbReversePrecWith sp p (Reverse x) = showbUnaryWith (showbPrecWith sp) "Reverse" p x {-# INLINE showbReversePrecWith #-} -- | Convert a 'Sum' value to a 'Builder' with the given show function and precedence. -- -- /Since: 2/ showbSumPrecWith :: (TextShow1 f, TextShow1 g) => (Int -> a -> Builder) -> Int -> Sum f g a -> Builder showbSumPrecWith sp p (InL x) = showbUnaryWith (showbPrecWith sp) "InL" p x showbSumPrecWith sp p (InR y) = showbUnaryWith (showbPrecWith sp) "InR" p y {-# INLINE showbSumPrecWith #-} instance (TextShow1 f, TextShow1 g, TextShow a) => TextShow (Compose f g a) where showbPrec = showbPrec1 INLINE_INST_FUN(showbPrec) instance (TextShow1 f, TextShow1 g) => TextShow1 (Compose f g) where showbPrecWith = showbComposePrecWith INLINE_INST_FUN(showbPrecWith) instance TextShow a => TextShow (Constant a b) where showbPrec = showbConstantPrecWith showbPrec INLINE_INST_FUN(showbPrec) instance TextShow a => TextShow1 (Constant a) where showbPrecWith = showbPrecWith2 showbPrec INLINE_INST_FUN(showbPrecWith) instance TextShow2 Constant where showbPrecWith2 sp _ = showbConstantPrecWith sp INLINE_INST_FUN(showbPrecWith2) instance (TextShow1 f, TextShow1 g, TextShow a) => TextShow (Product f g a) where showbPrec = showbPrec1 INLINE_INST_FUN(showbPrec) instance (TextShow1 f, TextShow1 g) => TextShow1 (Product f g) where showbPrecWith = showbProductPrecWith INLINE_INST_FUN(showbPrecWith) instance (TextShow1 f, TextShow a) => TextShow (Reverse f a) where showbPrec = showbPrec1 INLINE_INST_FUN(showbPrec) instance TextShow1 f => TextShow1 (Reverse f) where showbPrecWith = showbReversePrecWith INLINE_INST_FUN(showbPrecWith) instance (TextShow1 f, TextShow1 g, TextShow a) => TextShow (Sum f g a) where showbPrec = showbPrec1 INLINE_INST_FUN(showbPrec) instance (TextShow1 f, TextShow1 g) => TextShow1 (Sum f g) where showbPrecWith = showbSumPrecWith INLINE_INST_FUN(showbPrecWith)