| Copyright | (C) 2014-2016 Ryan Scott |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | Ryan Scott |
| Stability | Provisional |
| Portability | GHC |
| Safe Haskell | None |
| Language | Haskell2010 |
TextShow.Generic
Description
Generic versions of TextShow and TextShow1 class functions, as an alternative to
TextShow.TH, which uses Template Haskell. Because there is no Generic2
class, TextShow2 cannot be implemented generically.
This implementation is based off of the Generics.Deriving.Show module from the
generic-deriving library.
Since: 2
- genericShowt :: (Generic a, GTextShow (Rep a)) => a -> Text
- genericShowtl :: (Generic a, GTextShow (Rep a)) => a -> Text
- genericShowtPrec :: (Generic a, GTextShow (Rep a)) => Int -> a -> Text
- genericShowtlPrec :: (Generic a, GTextShow (Rep a)) => Int -> a -> Text
- genericShowtList :: (Generic a, GTextShow (Rep a)) => [a] -> Text
- genericShowtlList :: (Generic a, GTextShow (Rep a)) => [a] -> Text
- genericShowb :: (Generic a, GTextShow (Rep a)) => a -> Builder
- genericShowbPrec :: (Generic a, GTextShow (Rep a)) => Int -> a -> Builder
- genericShowbList :: (Generic a, GTextShow (Rep a)) => [a] -> Builder
- genericPrintT :: (Generic a, GTextShow (Rep a)) => a -> IO ()
- genericPrintTL :: (Generic a, GTextShow (Rep a)) => a -> IO ()
- genericHPrintT :: (Generic a, GTextShow (Rep a)) => Handle -> a -> IO ()
- genericHPrintTL :: (Generic a, GTextShow (Rep a)) => Handle -> a -> IO ()
- genericLiftShowbPrec :: (Generic1 f, GTextShow1 (Rep1 f)) => (Int -> a -> Builder) -> ([a] -> Builder) -> Int -> f a -> Builder
- genericShowbPrec1 :: (Generic a, Generic1 f, GTextShow (Rep a), GTextShow1 (Rep1 f)) => Int -> f a -> Builder
- class GTextShow f where
- gShowbPrec :: Int -> f a -> Builder
- class GTextShowCon f where
- gShowbPrecCon :: ConType -> Int -> f a -> Builder
- class GTextShow1 f where
- class GTextShow1Con f where
- class IsNullary f where
- data ConType
Generic show functions
TextShow instances can be easily defined for data types that are Generic instances.
The easiest way to do this is to use the DeriveGeneric extension.
{-# LANGUAGE DeriveGeneric #-}
import GHC.Generics
import TextShow
import TextShow.Generic
data D a = D a
deriving (Generic, Generic1)
instance TextShow a => TextShow (D a) where
showbPrec = genericShowbPrec
instance TextShow1 D where
liftShowbPrec = genericLiftShowbPrec
Understanding a compiler error
Suppose you intend to use genericShowbPrec to define a TextShow instance.
data Oops = Oops
-- forgot to add "deriving Generic" here!
instance TextShow Oops where
showbPrec = genericShowbPrec
If you forget to add a deriving clause to your data type, at
compile-time, you will get an error message that begins roughly as follows:Generic
No instance for (GTextShow (Rep Oops))
This error can be confusing, but don't let it intimidate you. The correct fix is
simply to add the missing "deriving " clause.Generic
Similarly, if the compiler complains about not having an instance for (, add a "GTextShow1
(Rep1 Oops1))deriving " clause.Generic1
genericShowtPrec :: (Generic a, GTextShow (Rep a)) => Int -> a -> Text Source
A Generic implementation of showPrect.
Since: 2
genericShowtlPrec :: (Generic a, GTextShow (Rep a)) => Int -> a -> Text Source
A Generic implementation of showtlPrec.
Since: 2
genericShowtlList :: (Generic a, GTextShow (Rep a)) => [a] -> Text Source
A Generic implementation of showtlList.
Since: 2
genericPrintT :: (Generic a, GTextShow (Rep a)) => a -> IO () Source
A Generic implementation of printT.
Since: 2
genericPrintTL :: (Generic a, GTextShow (Rep a)) => a -> IO () Source
A Generic implementation of printTL.
Since: 2
genericHPrintT :: (Generic a, GTextShow (Rep a)) => Handle -> a -> IO () Source
A Generic implementation of hPrintT.
Since: 2
genericHPrintTL :: (Generic a, GTextShow (Rep a)) => Handle -> a -> IO () Source
A Generic implementation of hPrintTL.
Since: 2
genericLiftShowbPrec :: (Generic1 f, GTextShow1 (Rep1 f)) => (Int -> a -> Builder) -> ([a] -> Builder) -> Int -> f a -> Builder Source
A Generic1 implementation of genericLiftShowbPrec.
Since: 2
genericShowbPrec1 :: (Generic a, Generic1 f, GTextShow (Rep a), GTextShow1 (Rep1 f)) => Int -> f a -> Builder Source
A 'Generic'/'Generic1' implementation of showbPrec1.
Since: 2
The GTextShow and GTextShow1 classes
class GTextShow f where Source
Methods
gShowbPrec :: Int -> f a -> Builder Source
This is used as the default generic implementation of showbPrec.
class GTextShowCon f where Source
Methods
gShowbPrecCon :: ConType -> Int -> f a -> Builder Source
Instances
| GTextShowCon * V1 Source | |
| GTextShowCon * U1 Source | |
| GTextShowCon * UChar Source | |
| GTextShowCon * UDouble Source | |
| GTextShowCon * UFloat Source | |
| GTextShowCon * UInt Source | |
| GTextShowCon * UWord Source | |
| TextShow c => GTextShowCon * (K1 i c) Source | |
| (GTextShowCon * f, GTextShowCon * g) => GTextShowCon * ((:*:) f g) Source | |
| (Selector s, GTextShowCon * f) => GTextShowCon * (S1 s f) Source |
class GTextShow1 f where Source
Class of generic representation types (Rep1) that can be converted to
a Builder by lifting through a unary type constructor.
Since: 2
Methods
gLiftShowbPrec :: (Int -> a -> Builder) -> ([a] -> Builder) -> Int -> f a -> Builder Source
This is used as the default generic implementation of showbPrecWith.
Instances
| GTextShow1 V1 Source | |
| (GTextShow1 f, GTextShow1 g) => GTextShow1 ((:+:) f g) Source | |
| GTextShow1 f => GTextShow1 (D1 d f) Source | |
| (Constructor c, GTextShow1Con f, IsNullary * f) => GTextShow1 (C1 c f) Source |
class GTextShow1Con f where Source
Methods
gLiftShowbPrecCon :: ConType -> (Int -> a -> Builder) -> ([a] -> Builder) -> Int -> f a -> Builder Source
Instances
| GTextShow1Con U1 Source | |
| GTextShow1Con Par1 Source | |
| GTextShow1Con UChar Source | |
| GTextShow1Con UDouble Source | |
| GTextShow1Con UFloat Source | |
| GTextShow1Con UInt Source | |
| GTextShow1Con UWord Source | |
| TextShow1 f => GTextShow1Con (Rec1 f) Source | |
| TextShow c => GTextShow1Con (K1 i c) Source | |
| (GTextShow1Con f, GTextShow1Con g) => GTextShow1Con ((:*:) f g) Source | |
| (TextShow1 f, GTextShow1Con g) => GTextShow1Con ((:.:) f g) Source | |
| (Selector s, GTextShow1Con f) => GTextShow1Con (S1 s f) Source |
class IsNullary f where Source
Class of generic representation types that represent a constructor with zero or more fields.
Instances
| IsNullary * U1 Source | |
| IsNullary * Par1 Source | |
| IsNullary * UChar Source | |
| IsNullary * UDouble Source | |
| IsNullary * UFloat Source | |
| IsNullary * UInt Source | |
| IsNullary * UWord Source | |
| IsNullary * (Rec1 f) Source | |
| IsNullary * (K1 i c) Source | |
| IsNullary * ((:*:) f g) Source | |
| IsNullary * ((:.:) f g) Source | |
| IsNullary * f => IsNullary * (S1 s f) Source |