-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Some useful combinators for the prettyprinter package -- -- Various utilities that make writing Pretty instances easier. -- -- Notable utilites include automatic deriving of Pretty instance via -- Generic, Data, or Show instance. @package prettyprinter-combinators @version 0.1 module Prettyprinter.Combinators -- | Overloaded conversion to Doc. -- -- Laws: -- --
-- >>> pretty 1 <+> pretty "hello" <+> pretty 1.234 -- 1 hello 1.234 --pretty :: Pretty a => a -> Doc ann -- | prettyList is only used to define the instance -- Pretty a => Pretty [a]. In normal circumstances -- only the pretty function is used. -- --
-- >>> prettyList [1, 23, 456] -- [1, 23, 456] --prettyList :: Pretty a => [a] -> Doc ann -- | The abstract data type Doc ann represents pretty -- documents that have been annotated with data of type ann. -- -- More specifically, a value of type Doc represents a -- non-empty set of possible layouts of a document. The layout functions -- select one of these possibilities, taking into account things like the -- width of the output document. -- -- The annotation is an arbitrary piece of data associated with (part of) -- a document. Annotations may be used by the rendering backends in order -- to display output differently, such as -- --
-- >>> putStrLn (show (vsep ["hello", "world"])) -- hello -- world --data Doc ann putDocLn :: Doc ann -> IO () displayDoc :: Doc ann -> Text displayDocString :: Doc ann -> String docFromString :: String -> Doc ann docFromText :: Text -> Doc ann -- | Convenience function to convert a Showable value to a -- Doc. If the String does not contain newlines, consider -- using the more performant unsafeViaShow. viaShow :: Show a => a -> Doc ann data MapEntry k v (:->) :: k -> v -> MapEntry k v infixr 0 :-> -- | Helper to make constructing MapEntry pairs easier by calling -- pretty on value. (-->) :: Pretty v => Text -> v -> MapEntry Text (Doc ann) infixr 0 --> ppMapEntryWith :: (k -> Doc ann) -> (v -> Doc ann) -> MapEntry k v -> Doc ann ppMapEntryWithSep :: Doc ann -> (k -> Doc ann) -> (v -> Doc ann) -> MapEntry k v -> Doc ann ppList :: Pretty a => [a] -> Doc ann (##) :: Doc ann -> Doc ann -> Doc ann infixr 6 ## ppDictHeader :: Doc ann -> [MapEntry Text (Doc ann)] -> Doc ann ppDictAssocList :: [MapEntry Text (Doc ann)] -> Doc ann ppTuple :: Pretty a => [a] -> Doc ann ppTupleWith :: (a -> Doc ann) -> [a] -> Doc ann ppListWith :: (a -> Doc ann) -> [a] -> Doc ann ppFoldableHeader :: (Pretty a, Foldable f) => Doc ann -> f a -> Doc ann ppFoldableHeaderWith :: Foldable f => (a -> Doc ann) -> Doc ann -> f a -> Doc ann ppNE :: Pretty a => NonEmpty a -> Doc ann ppNEWith :: (a -> Doc ann) -> NonEmpty a -> Doc ann ppMap :: (Pretty a, Pretty b) => Map a b -> Doc ann ppMapWith :: (k -> Doc ann) -> (v -> Doc ann) -> Map k v -> Doc ann ppSet :: Pretty a => Set a -> Doc ann ppSetWith :: (a -> Doc ann) -> Set a -> Doc ann ppBimap :: (Pretty k, Pretty v) => Bimap k v -> Doc ann ppBimapWith :: (k -> Doc ann) -> (v -> Doc ann) -> Bimap k v -> Doc ann ppIntSet :: IntSet -> Doc ann ppIntSetWith :: (Int -> Doc ann) -> IntSet -> Doc ann ppIntMap :: Pretty a => IntMap a -> Doc ann ppIntMapWith :: (Int -> Doc ann) -> (a -> Doc ann) -> IntMap a -> Doc ann ppHashSet :: Pretty a => HashSet a -> Doc ann ppHashSetWith :: (a -> Doc ann) -> HashSet a -> Doc ann ppHashMap :: (Pretty k, Pretty v) => HashMap k v -> Doc ann ppHashMapWith :: (k -> Doc ann) -> (v -> Doc ann) -> HashMap k v -> Doc ann ppVector :: Pretty a => Vector a -> Doc ann ppVectorWith :: (a -> Doc ann) -> Vector a -> Doc ann ppDList :: Pretty a => DList a -> Doc ann ppDListWith :: (a -> Doc ann) -> DList a -> Doc ann ppListWithDelim :: forall f ann. Foldable f => Doc ann -> Doc ann -> f (Doc ann) -> Doc ann ppAssocList :: (Pretty k, Pretty v) => [(k, v)] -> Doc ann ppAssocListWith :: (k -> Doc ann) -> (v -> Doc ann) -> [(k, v)] -> Doc ann ppAssocListWithSep :: Doc ann -> (k -> Doc ann) -> (v -> Doc ann) -> [(k, v)] -> Doc ann ppByteString :: ByteString -> Doc ann ppByteStringLazy :: ByteString -> Doc ann ppShortByteString :: ShortByteString -> Doc ann ppTrace :: Doc ann -> a -> a ppCallStack :: CallStack -> Doc ann -- | Pretty-print a CallStack just as GHC would. ppCallStackGHC :: CallStack -> Doc ann instance Data.Traversable.Traversable (Prettyprinter.Combinators.MapEntry k) instance Data.Foldable.Foldable (Prettyprinter.Combinators.MapEntry k) instance GHC.Base.Functor (Prettyprinter.Combinators.MapEntry k) instance (GHC.Show.Show k, GHC.Show.Show v) => GHC.Show.Show (Prettyprinter.Combinators.MapEntry k v) instance (GHC.Classes.Ord k, GHC.Classes.Ord v) => GHC.Classes.Ord (Prettyprinter.Combinators.MapEntry k v) instance (GHC.Classes.Eq k, GHC.Classes.Eq v) => GHC.Classes.Eq (Prettyprinter.Combinators.MapEntry k v) instance (Prettyprinter.Internal.Pretty k, Prettyprinter.Internal.Pretty v) => Prettyprinter.Internal.Pretty (Prettyprinter.Combinators.MapEntry k v) module Prettyprinter.Generics -- | Prettyprint using Data instance. -- --
-- >>> :{
-- test = Test
-- { testSet = Just $ Set.fromList [1..3]
-- , testMap =
-- Map.fromList [("foo", Set.fromList [1.5]), ("foo", Set.fromList [2.5, 3, 4])]
-- , testIntSet = IntSet.fromList [1, 2, 4, 5, 7]
-- , testIntMap = IntMap.fromList $ zip [1..] ["3", "2foo", "11"]
-- , testInt = 42
-- , testComplexMap = Map.fromList
-- [ ( Nothing
-- , IntMap.fromList $ zip [0..] $ map Set.fromList
-- [ ["foo", "bar"]
-- , ["baz"]
-- , ["quux", "frob"]
-- ]
-- )
-- , ( Just (Set.fromList [1])
-- , IntMap.fromList $ zip [0..] $ map Set.fromList
-- [ ["quux"]
-- , ["fizz", "buzz"]
-- ]
-- )
-- , ( Just (Set.fromList [3, 4])
-- , IntMap.fromList $ zip [0..] $ map Set.fromList
-- [ ["quux", "5"]
-- , []
-- , ["fizz", "buzz"]
-- ]
-- )
-- ]
-- , testComplexMap2 =
-- Map.singleton
-- (Just (Set.fromList [1..5]))
-- (Map.fromList
-- [ (NonEmpty.fromList [1, 2], Vector.fromList ["foo", "bar", "baz"])
-- , (NonEmpty.fromList [3], Vector.fromList ["quux"])
-- , (NonEmpty.fromList [4..10], Vector.fromList ["must", "put", "something", "in", "here"])
-- ])
-- }
-- :}
--
--
--
-- >>> ppGeneric test
-- Test
-- { testSet -> Just ({1, 2, 3})
-- , testMap -> {foo -> {2.5, 3.0, 4.0}}
-- , testIntSet -> {1, 2, 4, 5, 7}
-- , testIntMap -> {1 -> 3, 2 -> 2foo, 3 -> 11}
-- , testInt -> 42
-- , testComplexMap ->
-- { Nothing -> {0 -> {bar, foo}, 1 -> {baz}, 2 -> {frob, quux}}
-- , Just ({1}) -> {0 -> {quux}, 1 -> {buzz, fizz}}
-- , Just ({3, 4}) -> {0 -> {5, quux}, 1 -> {}, 2 -> {buzz, fizz}}
-- }
-- , testComplexMap2 ->
-- { Just ({1, 2, 3, 4, 5}) ->
-- { [1, 2] -> [foo, bar, baz]
-- , [3] -> [quux]
-- , [4, 5, 6, 7, 8, 9, 10] -> [must, put, something, in, here]
-- } }
-- }
--
ppGeneric :: (Generic a, GPretty (Rep a)) => a -> Doc ann
-- | A class to override Pretty when calling ppGeneric
-- without introducing orphans for standard types.
class PPGenericOverride a
ppGenericOverride :: PPGenericOverride a => a -> MetaDoc ann
-- | Overloaded conversion to Doc.
--
-- Laws:
--
-- -- >>> pretty 1 <+> pretty "hello" <+> pretty 1.234 -- 1 hello 1.234 --pretty :: Pretty a => a -> Doc ann -- | prettyList is only used to define the instance -- Pretty a => Pretty [a]. In normal circumstances -- only the pretty function is used. -- --
-- >>> prettyList [1, 23, 456] -- [1, 23, 456] --prettyList :: Pretty a => [a] -> Doc ann -- | Representable types of kind *. This class is derivable in GHC -- with the DeriveGeneric flag on. -- -- A Generic instance must satisfy the following laws: -- --
-- from . to ≡ id -- to . from ≡ id --class Generic a instance (GHC.TypeLits.KnownSymbol name, Prettyprinter.Generics.GCollectRecord f) => Prettyprinter.Generics.GPretty (GHC.Generics.M1 GHC.Generics.C ('GHC.Generics.MetaCons name _fixity 'GHC.Types.True) f) instance (GHC.TypeLits.KnownSymbol name, Prettyprinter.Generics.GPretty a) => Prettyprinter.Generics.GCollectRecord (GHC.Generics.M1 GHC.Generics.S ('GHC.Generics.MetaSel ('GHC.Maybe.Just name) su ss ds) a) instance (Prettyprinter.Generics.GCollectRecord f, Prettyprinter.Generics.GCollectRecord g) => Prettyprinter.Generics.GCollectRecord (f GHC.Generics.:*: g) instance Prettyprinter.Generics.GCollectRecord GHC.Generics.U1 instance (GHC.TypeLits.KnownSymbol name, Prettyprinter.Generics.GFields x) => Prettyprinter.Generics.GPretty (GHC.Generics.M1 GHC.Generics.C ('GHC.Generics.MetaCons name _fixity 'GHC.Types.False) x) instance Prettyprinter.Generics.GFields GHC.Generics.U1 instance Prettyprinter.Generics.GPretty x => Prettyprinter.Generics.GFields (GHC.Generics.M1 GHC.Generics.S ('GHC.Generics.MetaSel a b c d) x) instance (Prettyprinter.Generics.GFields f, Prettyprinter.Generics.GFields g) => Prettyprinter.Generics.GFields (f GHC.Generics.:*: g) instance Prettyprinter.Generics.PPGenericOverride a => Prettyprinter.Internal.Pretty (Prettyprinter.Generics.PPGenericOverrideToPretty a) instance (Prettyprinter.Generics.PPGenericOverride a, Prettyprinter.Generics.PPGenericOverride b) => Prettyprinter.Generics.PPGenericOverride (a, b) instance (Prettyprinter.Generics.PPGenericOverride a, Prettyprinter.Generics.PPGenericOverride b, Prettyprinter.Generics.PPGenericOverride c) => Prettyprinter.Generics.PPGenericOverride (a, b, c) instance Prettyprinter.Generics.PPGenericOverride v => Prettyprinter.Generics.PPGenericOverride (GHC.Maybe.Maybe v) instance Prettyprinter.Generics.PPGenericOverride a => Prettyprinter.Generics.GPretty (GHC.Generics.K1 i a) instance Prettyprinter.Internal.Pretty a => Prettyprinter.Generics.PPGenericOverride a instance Prettyprinter.Generics.PPGenericOverride GHC.Types.Int instance Prettyprinter.Generics.PPGenericOverride GHC.Types.Float instance Prettyprinter.Generics.PPGenericOverride GHC.Types.Double instance Prettyprinter.Generics.PPGenericOverride GHC.Integer.Type.Integer instance Prettyprinter.Generics.PPGenericOverride GHC.Natural.Natural instance Prettyprinter.Generics.PPGenericOverride GHC.Types.Word instance Prettyprinter.Generics.PPGenericOverride GHC.Word.Word8 instance Prettyprinter.Generics.PPGenericOverride GHC.Word.Word16 instance Prettyprinter.Generics.PPGenericOverride GHC.Word.Word32 instance Prettyprinter.Generics.PPGenericOverride GHC.Word.Word64 instance Prettyprinter.Generics.PPGenericOverride GHC.Int.Int8 instance Prettyprinter.Generics.PPGenericOverride GHC.Int.Int16 instance Prettyprinter.Generics.PPGenericOverride GHC.Int.Int32 instance Prettyprinter.Generics.PPGenericOverride GHC.Int.Int64 instance Prettyprinter.Generics.PPGenericOverride () instance Prettyprinter.Generics.PPGenericOverride GHC.Types.Bool instance Prettyprinter.Generics.PPGenericOverride GHC.Types.Char instance Prettyprinter.Generics.PPGenericOverride a => Prettyprinter.Generics.PPGenericOverride (GHC.Real.Ratio a) instance Prettyprinter.Generics.PPGenericOverride GHC.Stack.Types.CallStack instance Prettyprinter.Generics.PPGenericOverride (Prettyprinter.Internal.Doc Data.Void.Void) instance Prettyprinter.Generics.PPGenericOverride GHC.Base.String instance Prettyprinter.Generics.PPGenericOverride Data.Text.Internal.Text instance Prettyprinter.Generics.PPGenericOverride Data.Text.Internal.Lazy.Text instance Prettyprinter.Generics.PPGenericOverride Data.ByteString.Internal.ByteString instance Prettyprinter.Generics.PPGenericOverride Data.ByteString.Lazy.Internal.ByteString instance Prettyprinter.Generics.PPGenericOverride Data.ByteString.Short.Internal.ShortByteString instance Prettyprinter.Generics.PPGenericOverride (GHC.ForeignPtr.ForeignPtr a) instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.OccName instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.NameFlavour instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.PkgName instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.NameSpace instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.ModName instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Name instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.TyVarBndr instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.TyLit instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Type instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.SourceUnpackedness instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.SourceStrictness instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Bang instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Con instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Lit instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Bytes instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Stmt instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Guard instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Body instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Match instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Range instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Exp instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Pat instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Clause instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.DerivStrategy instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.DerivClause instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.FunDep instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Overlap instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Callconv instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Safety instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Foreign instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.FixityDirection instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Fixity instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Inline instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.RuleMatch instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Phases instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.RuleBndr instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.AnnTarget instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Pragma instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.TySynEqn instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.FamilyResultSig instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.InjectivityAnn instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.TypeFamilyHead instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Role instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.PatSynArgs instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.PatSynDir instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Dec instance Prettyprinter.Generics.PPGenericOverride Language.Haskell.TH.Syntax.Info instance Prettyprinter.Generics.PPGenericOverride v => Prettyprinter.Generics.PPGenericOverride [v] instance (Prettyprinter.Generics.PPGenericOverride k, Prettyprinter.Generics.PPGenericOverride v) => Prettyprinter.Generics.PPGenericOverride [(k, v)] instance Prettyprinter.Generics.PPGenericOverride k => Prettyprinter.Generics.PPGenericOverride (GHC.Base.NonEmpty k) instance Prettyprinter.Generics.PPGenericOverride v => Prettyprinter.Generics.PPGenericOverride (Data.Vector.Vector v) instance (Prettyprinter.Generics.PPGenericOverride k, Prettyprinter.Generics.PPGenericOverride v) => Prettyprinter.Generics.PPGenericOverride (Data.Map.Internal.Map k v) instance Prettyprinter.Generics.PPGenericOverride v => Prettyprinter.Generics.PPGenericOverride (Data.Set.Internal.Set v) instance (Prettyprinter.Generics.PPGenericOverride k, Prettyprinter.Generics.PPGenericOverride v) => Prettyprinter.Generics.PPGenericOverride (Data.Bimap.Bimap k v) instance Prettyprinter.Generics.PPGenericOverride Data.IntSet.Internal.IntSet instance Prettyprinter.Generics.PPGenericOverride v => Prettyprinter.Generics.PPGenericOverride (Data.IntMap.Internal.IntMap v) instance Prettyprinter.Generics.PPGenericOverride v => Prettyprinter.Generics.PPGenericOverride (Data.HashSet.Internal.HashSet v) instance (Prettyprinter.Generics.PPGenericOverride k, Prettyprinter.Generics.PPGenericOverride v) => Prettyprinter.Generics.PPGenericOverride (Data.HashMap.Internal.HashMap k v) instance Prettyprinter.Generics.PPGenericOverride (f (g a)) => Prettyprinter.Generics.PPGenericOverride (Data.Functor.Compose.Compose f g a) instance Prettyprinter.Generics.GPretty GHC.Generics.V1 instance Prettyprinter.Generics.GPretty GHC.Generics.U1 instance (Prettyprinter.Generics.GPretty f, Prettyprinter.Generics.GPretty g) => Prettyprinter.Generics.GPretty (f GHC.Generics.:+: g) instance (Prettyprinter.Generics.GPretty f, Prettyprinter.Generics.GPretty g) => Prettyprinter.Generics.GPretty (f GHC.Generics.:*: g) instance Prettyprinter.Generics.GPretty x => Prettyprinter.Generics.GPretty (GHC.Generics.M1 GHC.Generics.D ('GHC.Generics.MetaData a b c d) x) instance Prettyprinter.Generics.GPretty x => Prettyprinter.Generics.GPretty (GHC.Generics.M1 GHC.Generics.S ('GHC.Generics.MetaSel 'GHC.Maybe.Nothing b c d) x) module Prettyprinter.Data -- | Prettyprint using Data instance. -- --
-- >>> :{
-- test =
-- Bar
-- ("foo", 10, 20)
-- (Map.fromList (zip ["foo", "bar", "baz"] [1..]))
-- (Map.fromList (zip ["foo", "bar", "baz", "quux", "fizz", "buzz", "frob", "wat"] [1..]))
-- (Just
-- (Foo
-- 1
-- []
-- 3.14159265358979323846264338327950288
-- (Just
-- (Foo
-- 1
-- [2]
-- 2.71828182
-- (Just (Bar ("x", 1, 2) mempty mempty Nothing (NonEmpty.fromList [42])))))))
-- (NonEmpty.fromList [1..42])
-- :}
--
--
--
-- >>> ppData test
-- Bar
-- (foo, 10, 20)
-- {bar -> 2, baz -> 3, foo -> 1}
-- { bar -> 2
-- , baz -> 3
-- , buzz -> 6
-- , fizz -> 5
-- , foo -> 1
-- , frob -> 7
-- , quux -> 4
-- , wat -> 8
-- }
-- Just Foo
-- 1
-- {}
-- 3.141592653589793
-- Just (Foo 1 [2] 2.71828182 (Just (Bar (x, 1, 2) {} {} Nothing [42])))
-- [ 1
-- , 2
-- , 3
-- , 4
-- , 5
-- , 6
-- , 7
-- , 8
-- , 9
-- , 10
-- , 11
-- , 12
-- , 13
-- , 14
-- , 15
-- , 16
-- , 17
-- , 18
-- , 19
-- , 20
-- , 21
-- , 22
-- , 23
-- , 24
-- , 25
-- , 26
-- , 27
-- , 28
-- , 29
-- , 30
-- , 31
-- , 32
-- , 33
-- , 34
-- , 35
-- , 36
-- , 37
-- , 38
-- , 39
-- , 40
-- , 41
-- , 42
-- ]
--
ppData :: Data a => a -> Doc ann
ppDataSimple :: Data a => a -> Doc ann
module Prettyprinter.Show
ppShow :: Show a => a -> Doc ann