Copyright | (c) Sirui Lu 2021-2024 |
---|---|
License | BSD-3-Clause (see the LICENSE file) |
Maintainer | siruilu@cs.washington.edu |
Stability | Experimental |
Portability | GHC only |
Safe Haskell | None |
Language | Haskell2010 |
Grisette.Internal.Core.Data.Class.PPrint
Description
Synopsis
- class PPrint a where
- pformat :: a -> Doc ann
- pformatPrec :: Int -> a -> Doc ann
- pformatList :: [a] -> Doc ann
- docToTextWith :: LayoutOptions -> Doc ann -> Text
- docToTextWithWidth :: Int -> Doc ann -> Text
- docToText :: Doc ann -> Text
- pformatTextWith :: PPrint a => LayoutOptions -> a -> Text
- pformatTextWithWidth :: PPrint a => Int -> a -> Text
- pformatText :: PPrint a => a -> Text
- pprint :: PPrint a => a -> IO ()
- class (forall a. PPrint a => PPrint (f a)) => PPrint1 (f :: Type -> Type) where
- pformatPrec1 :: (PPrint1 f, PPrint a) => Int -> f a -> Doc ann
- pformatList1 :: (PPrint1 f, PPrint a) => [f a] -> Doc ann
- class (forall a. PPrint a => PPrint1 (f a), forall a b. (PPrint a, PPrint b) => PPrint (f a b)) => PPrint2 (f :: Type -> Type -> Type) where
- pformatPrec2 :: (PPrint2 f, PPrint a, PPrint b) => Int -> f a b -> Doc ann
- pformatList2 :: (PPrint2 f, PPrint a, PPrint b) => [f a b] -> Doc ann
- genericPFormatPrec :: (Generic a, GPPrint Arity0 (Rep a)) => Int -> a -> Doc ann
- genericLiftPFormatPrec :: (Generic1 f, GPPrint Arity1 (Rep1 f)) => (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> Int -> f a -> Doc ann
- genericPFormatList :: (Generic a, GPPrint Arity0 (Rep a)) => [a] -> Doc ann
- genericLiftPFormatList :: (Generic1 f, GPPrint Arity1 (Rep1 f)) => (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> [f a] -> Doc ann
- data family PPrintArgs arity a ann
- class GPPrint arity (f :: Type -> Type) where
- gpformatPrec :: PPrintArgs arity a ann -> PPrintType -> Int -> f a -> Doc ann
- gpformatList :: HasCallStack => PPrintArgs arity a ann -> [f a] -> Doc ann
- gisNullary :: HasCallStack => PPrintArgs arity a ann -> f a -> Bool
- data PPrintType
- groupedEnclose :: Doc ann -> Doc ann -> Doc ann -> Doc ann
- condEnclose :: Bool -> Doc ann -> Doc ann -> Doc ann -> Doc ann
- pformatWithConstructor :: Int -> Doc ann -> [Doc ann] -> Doc ann
- pformatWithConstructorNoAlign :: Int -> Doc ann -> [Doc ann] -> Doc ann
- viaShowsPrec :: (Int -> a -> ShowS) -> Int -> a -> Doc ann
- module Prettyprinter
Pretty printing
Pretty printing of values.
This class is similar to the Pretty
class from the Prettyprinter package,
but it also provides pretty printing with a given precedence level.
We are able to derive instances of this class for algebraic data types.
You may need the DerivingVia
and DerivingStrategies
extensions.
data X = ... deriving Generic deriving PPrint via (Default X)
The derived instance will pretty print the value with a format similar to the one used by ormolu.
Minimal complete definition
Methods
pformat :: a -> Doc ann Source #
pformatPrec :: Int -> a -> Doc ann Source #
pformatList :: [a] -> Doc ann Source #
Instances
docToTextWith :: LayoutOptions -> Doc ann -> Text Source #
Convenience function to layout and render a Doc
to Text
.
You can control the layout with LayoutOptions
.
docToText :: Doc ann -> Text Source #
Convenience function to layout and render a Doc
to Text
.
The default layout options defaultLayoutOptions
are used.
pformatTextWith :: PPrint a => LayoutOptions -> a -> Text Source #
Convenience function to format a value to Text
.
You can control the layout with LayoutOptions
.
pformatTextWithWidth :: PPrint a => Int -> a -> Text Source #
Convenience function to format a value to Text
.
You can control the layout with a single number of the width limit.
pformatText :: PPrint a => a -> Text Source #
Convenience function to format a value to Text
.
The default layout options defaultLayoutOptions
are used.
class (forall a. PPrint a => PPrint (f a)) => PPrint1 (f :: Type -> Type) where Source #
Lifting of the PPrint
class to unary type constructors.
Minimal complete definition
Methods
liftPFormatPrec :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> Int -> f a -> Doc ann Source #
Lift a pretty-printer to a unary type constructor.
liftPFormatList :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> [f a] -> Doc ann Source #
Lift a pretty-printer to list of values with unary type constructors.
Instances
pformatPrec1 :: (PPrint1 f, PPrint a) => Int -> f a -> Doc ann Source #
Lift the standard pretty-printer (pformatPrec
, pformatList
) to unary
type constructors.
pformatList1 :: (PPrint1 f, PPrint a) => [f a] -> Doc ann Source #
Lift the standard pretty-printer (pformatPrec
, pformatList
) to list of
values with unary type constructors.
class (forall a. PPrint a => PPrint1 (f a), forall a b. (PPrint a, PPrint b) => PPrint (f a b)) => PPrint2 (f :: Type -> Type -> Type) where Source #
Lifting of the PPrint
class to binary type constructors.
Minimal complete definition
Methods
liftPFormatPrec2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> Int -> f a b -> Doc ann Source #
Lift two pretty-printers to a binary type constructor.
liftPFormatList2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> [f a b] -> Doc ann Source #
Lift two pretty-printers to list of values with binary type constructors.
Instances
PPrint2 Either Source # | |
PPrint2 HashMap Source # | |
PPrint2 (,) Source # | |
PPrint a => PPrint2 ((,,) a) Source # | |
Defined in Grisette.Internal.Internal.Impl.Core.Data.Class.PPrint Methods liftPFormatPrec2 :: (Int -> a0 -> Doc ann) -> ([a0] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> Int -> (a, a0, b) -> Doc ann Source # liftPFormatList2 :: (Int -> a0 -> Doc ann) -> ([a0] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> [(a, a0, b)] -> Doc ann Source # | |
(PPrint a1, PPrint a2) => PPrint2 ((,,,) a1 a2) Source # | |
Defined in Grisette.Internal.Internal.Impl.Core.Data.Class.PPrint Methods liftPFormatPrec2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> Int -> (a1, a2, a, b) -> Doc ann Source # liftPFormatList2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> [(a1, a2, a, b)] -> Doc ann Source # | |
(PPrint a1, PPrint a2, PPrint a3) => PPrint2 ((,,,,) a1 a2 a3) Source # | |
Defined in Grisette.Internal.Internal.Impl.Core.Data.Class.PPrint Methods liftPFormatPrec2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> Int -> (a1, a2, a3, a, b) -> Doc ann Source # liftPFormatList2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> [(a1, a2, a3, a, b)] -> Doc ann Source # | |
(PPrint a1, PPrint a2, PPrint a3, PPrint a4) => PPrint2 ((,,,,,) a1 a2 a3 a4) Source # | |
Defined in Grisette.Internal.Internal.Impl.Core.Data.Class.PPrint Methods liftPFormatPrec2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> Int -> (a1, a2, a3, a4, a, b) -> Doc ann Source # liftPFormatList2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> [(a1, a2, a3, a4, a, b)] -> Doc ann Source # | |
(PPrint a1, PPrint a2, PPrint a3, PPrint a4, PPrint a5) => PPrint2 ((,,,,,,) a1 a2 a3 a4 a5) Source # | |
Defined in Grisette.Internal.Internal.Impl.Core.Data.Class.PPrint Methods liftPFormatPrec2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> Int -> (a1, a2, a3, a4, a5, a, b) -> Doc ann Source # liftPFormatList2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> [(a1, a2, a3, a4, a5, a, b)] -> Doc ann Source # | |
(PPrint a1, PPrint a2, PPrint a3, PPrint a4, PPrint a5, PPrint a6) => PPrint2 ((,,,,,,,) a1 a2 a3 a4 a5 a6) Source # | |
Defined in Grisette.Internal.Internal.Impl.Core.Data.Class.PPrint Methods liftPFormatPrec2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> Int -> (a1, a2, a3, a4, a5, a6, a, b) -> Doc ann Source # liftPFormatList2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> [(a1, a2, a3, a4, a5, a6, a, b)] -> Doc ann Source # | |
(PPrint a1, PPrint a2, PPrint a3, PPrint a4, PPrint a5, PPrint a6, PPrint a7) => PPrint2 ((,,,,,,,,) a1 a2 a3 a4 a5 a6 a7) Source # | |
Defined in Grisette.Internal.Internal.Impl.Core.Data.Class.PPrint Methods liftPFormatPrec2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> Int -> (a1, a2, a3, a4, a5, a6, a7, a, b) -> Doc ann Source # liftPFormatList2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> [(a1, a2, a3, a4, a5, a6, a7, a, b)] -> Doc ann Source # | |
(PPrint a1, PPrint a2, PPrint a3, PPrint a4, PPrint a5, PPrint a6, PPrint a7, PPrint a8) => PPrint2 ((,,,,,,,,,) a1 a2 a3 a4 a5 a6 a7 a8) Source # | |
Defined in Grisette.Internal.Internal.Impl.Core.Data.Class.PPrint Methods liftPFormatPrec2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> Int -> (a1, a2, a3, a4, a5, a6, a7, a8, a, b) -> Doc ann Source # liftPFormatList2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> [(a1, a2, a3, a4, a5, a6, a7, a8, a, b)] -> Doc ann Source # | |
(PPrint a1, PPrint a2, PPrint a3, PPrint a4, PPrint a5, PPrint a6, PPrint a7, PPrint a8, PPrint a9) => PPrint2 ((,,,,,,,,,,) a1 a2 a3 a4 a5 a6 a7 a8 a9) Source # | |
Defined in Grisette.Internal.Internal.Impl.Core.Data.Class.PPrint Methods liftPFormatPrec2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> Int -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a, b) -> Doc ann Source # liftPFormatList2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> [(a1, a2, a3, a4, a5, a6, a7, a8, a9, a, b)] -> Doc ann Source # | |
(PPrint a1, PPrint a2, PPrint a3, PPrint a4, PPrint a5, PPrint a6, PPrint a7, PPrint a8, PPrint a9, PPrint a10) => PPrint2 ((,,,,,,,,,,,) a1 a2 a3 a4 a5 a6 a7 a8 a9 a10) Source # | |
Defined in Grisette.Internal.Internal.Impl.Core.Data.Class.PPrint Methods liftPFormatPrec2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> Int -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a, b) -> Doc ann Source # liftPFormatList2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> [(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a, b)] -> Doc ann Source # | |
(PPrint a1, PPrint a2, PPrint a3, PPrint a4, PPrint a5, PPrint a6, PPrint a7, PPrint a8, PPrint a9, PPrint a10, PPrint a11) => PPrint2 ((,,,,,,,,,,,,) a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11) Source # | |
Defined in Grisette.Internal.Internal.Impl.Core.Data.Class.PPrint Methods liftPFormatPrec2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> Int -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a, b) -> Doc ann Source # liftPFormatList2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> [(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a, b)] -> Doc ann Source # | |
(PPrint a1, PPrint a2, PPrint a3, PPrint a4, PPrint a5, PPrint a6, PPrint a7, PPrint a8, PPrint a9, PPrint a10, PPrint a11, PPrint a12) => PPrint2 ((,,,,,,,,,,,,,) a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12) Source # | |
Defined in Grisette.Internal.Internal.Impl.Core.Data.Class.PPrint Methods liftPFormatPrec2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> Int -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a, b) -> Doc ann Source # liftPFormatList2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> [(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a, b)] -> Doc ann Source # | |
(PPrint a1, PPrint a2, PPrint a3, PPrint a4, PPrint a5, PPrint a6, PPrint a7, PPrint a8, PPrint a9, PPrint a10, PPrint a11, PPrint a12, PPrint a13) => PPrint2 ((,,,,,,,,,,,,,,) a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13) Source # | |
Defined in Grisette.Internal.Internal.Impl.Core.Data.Class.PPrint Methods liftPFormatPrec2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> Int -> (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a, b) -> Doc ann Source # liftPFormatList2 :: (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> (Int -> b -> Doc ann) -> ([b] -> Doc ann) -> [(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a, b)] -> Doc ann Source # |
pformatPrec2 :: (PPrint2 f, PPrint a, PPrint b) => Int -> f a b -> Doc ann Source #
Lift the standard pretty-printer (pformatPrec
, pformatList
) to binary
type constructors.
pformatList2 :: (PPrint2 f, PPrint a, PPrint b) => [f a b] -> Doc ann Source #
Lift the standard pretty-printer (pformatPrec
, pformatList
) to list of
values with binary type constructors.
Generic PPrint
genericPFormatPrec :: (Generic a, GPPrint Arity0 (Rep a)) => Int -> a -> Doc ann Source #
Generic pformatPrec
function.
genericLiftPFormatPrec :: (Generic1 f, GPPrint Arity1 (Rep1 f)) => (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> Int -> f a -> Doc ann Source #
Generic liftPFormatPrec
function.
genericPFormatList :: (Generic a, GPPrint Arity0 (Rep a)) => [a] -> Doc ann Source #
Generic pformatList
function.
genericLiftPFormatList :: (Generic1 f, GPPrint Arity1 (Rep1 f)) => (Int -> a -> Doc ann) -> ([a] -> Doc ann) -> [f a] -> Doc ann Source #
Generic liftPFormatList
function.
data family PPrintArgs arity a ann Source #
The arguments to the generic PPrint
class.
Instances
data PPrintArgs Arity0 _ _1 Source # | |
data PPrintArgs Arity1 a ann Source # | |
class GPPrint arity (f :: Type -> Type) where Source #
Generic PPrint
class.
Minimal complete definition
Methods
gpformatPrec :: PPrintArgs arity a ann -> PPrintType -> Int -> f a -> Doc ann Source #
gpformatList :: HasCallStack => PPrintArgs arity a ann -> [f a] -> Doc ann Source #
gisNullary :: HasCallStack => PPrintArgs arity a ann -> f a -> Bool Source #
Instances
data PPrintType Source #
Controls how to pretty-print a generic representation.
Instances
Show PPrintType Source # | |
Defined in Grisette.Internal.Internal.Decl.Core.Data.Class.PPrint Methods showsPrec :: Int -> PPrintType -> ShowS # show :: PPrintType -> String # showList :: [PPrintType] -> ShowS # | |
Eq PPrintType Source # | |
Helpers
groupedEnclose :: Doc ann -> Doc ann -> Doc ann -> Doc ann Source #
Enclose a document with left and right documents.
The pretty printer will try to layout the document in a single line, but the right document may be split to a newline.
condEnclose :: Bool -> Doc ann -> Doc ann -> Doc ann -> Doc ann Source #
Conditionally enclose a document with left and right documents.
If the condition is True
, then this function is equivalent to
groupedEnclose
.
pformatWithConstructor :: Int -> Doc ann -> [Doc ann] -> Doc ann Source #
Pretty print a list of fields with a constructor.
Aligns the fields and nests them by 2 spaces.
pformatWithConstructorNoAlign :: Int -> Doc ann -> [Doc ann] -> Doc ann Source #
Pretty print a list of fields with a constructor without alignment.
viaShowsPrec :: (Int -> a -> ShowS) -> Int -> a -> Doc ann Source #
Pretty print a value using showsPrec
.
Re-exports
module Prettyprinter