prettyprinter-combinators 0.1.1.1 → 0.1.2
raw patch · 9 files changed
+84/−73 lines, 9 filesdep ~basedep ~template-haskell
Dependency ranges changed: base, template-haskell
Files
- Changelog.md +6/−0
- Readme.md +2/−0
- prettyprinter-combinators.cabal +18/−16
- src/Prettyprinter/Combinators.hs +2/−4
- src/Prettyprinter/Combinators/Basic.hs +1/−2
- src/Prettyprinter/Data.hs +1/−0
- src/Prettyprinter/Generics.hs +26/−48
- src/Prettyprinter/MetaDoc.hs +0/−2
- src/Prettyprinter/Show.hs +28/−1
Changelog.md view
@@ -1,3 +1,9 @@+# 0.1.2++- Fix build with GHC 9.8+- Add `PPGeneric` newtype to apply `ppGeneric` through `DerivingVia`+- Add `PPShow` newtype to apply `ppShow` through `DerivingVia`+ # 0.1.1.1 - `ppVector` and `ppVectorWith` now accept generic vectors - Add lower bound `pretty-show >= 1.6`
Readme.md view
@@ -1,3 +1,5 @@+[](https://github.com/sergv/prettyprinter-combinators/actions/workflows/haskell-ci.yaml)+ This is a set of utilities for the Haskell `prettyrinter` package. Most notable is automatic deriving of `Pretty` instance from the `Generic` instance, e.g.
prettyprinter-combinators.cabal view
@@ -3,7 +3,7 @@ name: prettyprinter-combinators version:- 0.1.1.1+ 0.1.2 synopsis: Some useful combinators for the prettyprinter package description:@@ -25,10 +25,10 @@ Sergey Vinokurov <serg.foo@gmail.com> tested-with:- , GHC == 8.10.7- , GHC == 9.0.2- , GHC == 9.2.5- , GHC == 9.4.4+ , GHC == 9.2.8+ , GHC == 9.4.7+ , GHC == 9.6.3+ , GHC == 9.8.1 build-type: Simple@@ -44,21 +44,18 @@ common ghc-options default-language:- Haskell2010-- default-extensions:- ImportQualifiedPost+ GHC2021 ghc-options: -Weverything- -Wno-type-defaults+ -Wno-all-missed-specialisations -Wno-implicit-prelude- -Wno-missing-local-signatures- -Wno-missing-import-lists -Wno-missed-specialisations- -Wno-all-missed-specialisations- -Wno-safe+ -Wno-missing-import-lists+ -Wno-missing-local-signatures -Wno-missing-safe-haskell-mode+ -Wno-safe+ -Wno-type-defaults -Wno-unsafe if impl(ghc >= 8.8)@@ -69,6 +66,11 @@ ghc-options: -Wno-missing-kind-signatures + if impl(ghc >= 9.8)+ ghc-options:+ -Wno-missing-role-annotations+ -Wno-missing-poly-kind-signatures+ library import: ghc-options exposed-modules:@@ -82,7 +84,7 @@ hs-source-dirs: src build-depends:- , base >= 4.14 && <5+ , base >= 4.16 && <5 , bimap , bytestring , containers@@ -90,7 +92,7 @@ , pretty-show >= 1.6 , prettyprinter >= 1.7 , syb- , template-haskell >= 2.10+ , template-haskell >= 2.18 , text , unordered-containers , vector
src/Prettyprinter/Combinators.hs view
@@ -6,10 +6,8 @@ -- Maintainer : serg.foo@gmail.com ---------------------------------------------------------------------------- -{-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveTraversable #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE OverloadedStrings #-} module Prettyprinter.Combinators ( Pretty(..)
src/Prettyprinter/Combinators/Basic.hs view
@@ -6,8 +6,7 @@ -- Maintainer : serg.foo@gmail.com ---------------------------------------------------------------------------- -{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE OverloadedStrings #-} module Prettyprinter.Combinators.Basic ( (##)
src/Prettyprinter/Data.hs view
@@ -125,6 +125,7 @@ ppData :: Data a => a -> Doc ann ppData = mdPayload . gpretty +-- | Prettyprint using 'Data.Generics.gshow'. ppDataSimple :: Data a => a -> Doc ann ppDataSimple = pretty . Data.Generics.gshow
src/Prettyprinter/Generics.hs view
@@ -8,18 +8,15 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-} module Prettyprinter.Generics ( ppGeneric+ , PPGeneric(..) , PPGenericOverride(..) , Pretty(..) , Generic@@ -56,10 +53,6 @@ import GHC.Stack (CallStack) import GHC.TypeLits -#if !MIN_VERSION_GLASGOW_HASKELL(9, 2, 0, 0)-import Numeric.Natural-#endif- import Prettyprinter import Prettyprinter.Combinators import Prettyprinter.MetaDoc@@ -69,6 +62,7 @@ -- $setup -- >>> :set -XDeriveGeneric+-- >>> :set -XDerivingVia -- >>> :set -XImportQualifiedPost -- >>> import Data.List.NonEmpty (NonEmpty(..)) -- >>> import Data.List.NonEmpty qualified as NonEmpty@@ -96,9 +90,27 @@ -- } deriving (Generic) -- :} --- | Prettyprint using 'Generic.Data' instance.+-- | Helper to use 'GHC.Generics.Generic'-based prettyprinting with DerivingVia. -- -- >>> :{+-- data TestWithDeriving a b = TestWithDeriving+-- { testSet :: Maybe (Set a)+-- , testB :: b+-- , testIntMap :: IntMap String+-- , testComplexMap :: Map (Maybe (Set Int)) (IntMap (Set String))+-- }+-- deriving (Generic)+-- deriving Pretty via PPGeneric (TestWithDeriving a b)+-- :}+--+newtype PPGeneric a = PPGeneric { unPPGeneric :: a }++instance (Generic a, GPretty (Rep a)) => Pretty (PPGeneric a) where+ pretty = ppGeneric . unPPGeneric++-- | Prettyprint using 'GHC.Generics.Generic' instance.+--+-- >>> :{ -- test = Test -- { testSet = Just $ Set.fromList [1..3] -- , testMap =@@ -309,17 +321,14 @@ instance {-# OVERLAPS #-} PPGenericOverride (ForeignPtr a) where ppGenericOverride = atomicMetaDoc . pretty . show +instance {-# OVERLAPS #-} PPGenericOverride a => PPGenericOverride (TH.TyVarBndr a) where ppGenericOverride = gpretty . from+ instance {-# OVERLAPS #-} PPGenericOverride TH.OccName where ppGenericOverride = gpretty . from instance {-# OVERLAPS #-} PPGenericOverride TH.NameFlavour where ppGenericOverride = gpretty . from instance {-# OVERLAPS #-} PPGenericOverride TH.PkgName where ppGenericOverride = gpretty . from instance {-# OVERLAPS #-} PPGenericOverride TH.NameSpace where ppGenericOverride = gpretty . from instance {-# OVERLAPS #-} PPGenericOverride TH.ModName where ppGenericOverride = gpretty . from instance {-# OVERLAPS #-} PPGenericOverride TH.Name where ppGenericOverride = gpretty . from-#if MIN_VERSION_template_haskell(2, 17, 0)-instance {-# OVERLAPS #-} PPGenericOverride a => PPGenericOverride (TH.TyVarBndr a) where ppGenericOverride = gpretty . from-#else-instance {-# OVERLAPS #-} PPGenericOverride TH.TyVarBndr where ppGenericOverride = gpretty . from-#endif instance {-# OVERLAPS #-} PPGenericOverride TH.TyLit where ppGenericOverride = gpretty . from instance {-# OVERLAPS #-} PPGenericOverride TH.Type where ppGenericOverride = gpretty . from instance {-# OVERLAPS #-} PPGenericOverride TH.SourceUnpackedness where ppGenericOverride = gpretty . from@@ -336,10 +345,8 @@ instance {-# OVERLAPS #-} PPGenericOverride TH.Exp where ppGenericOverride = gpretty . from instance {-# OVERLAPS #-} PPGenericOverride TH.Pat where ppGenericOverride = gpretty . from instance {-# OVERLAPS #-} PPGenericOverride TH.Clause where ppGenericOverride = gpretty . from-#if MIN_VERSION_template_haskell(2, 12, 0) instance {-# OVERLAPS #-} PPGenericOverride TH.DerivStrategy where ppGenericOverride = gpretty . from instance {-# OVERLAPS #-} PPGenericOverride TH.DerivClause where ppGenericOverride = gpretty . from-#endif instance {-# OVERLAPS #-} PPGenericOverride TH.FunDep where ppGenericOverride = gpretty . from instance {-# OVERLAPS #-} PPGenericOverride TH.Overlap where ppGenericOverride = gpretty . from instance {-# OVERLAPS #-} PPGenericOverride TH.Callconv where ppGenericOverride = gpretty . from@@ -358,14 +365,14 @@ instance {-# OVERLAPS #-} PPGenericOverride TH.InjectivityAnn where ppGenericOverride = gpretty . from instance {-# OVERLAPS #-} PPGenericOverride TH.TypeFamilyHead where ppGenericOverride = gpretty . from instance {-# OVERLAPS #-} PPGenericOverride TH.Role where ppGenericOverride = gpretty . from-#if MIN_VERSION_template_haskell(2, 12, 0) instance {-# OVERLAPS #-} PPGenericOverride TH.PatSynArgs where ppGenericOverride = gpretty . from instance {-# OVERLAPS #-} PPGenericOverride TH.PatSynDir where ppGenericOverride = gpretty . from-#endif instance {-# OVERLAPS #-} PPGenericOverride TH.Dec where ppGenericOverride = gpretty . from instance {-# OVERLAPS #-} PPGenericOverride TH.Info where ppGenericOverride = gpretty . from-#if MIN_VERSION_template_haskell(2, 17, 0) instance {-# OVERLAPS #-} PPGenericOverride TH.Specificity where ppGenericOverride = gpretty . from++#if MIN_VERSION_template_haskell(2, 21, 0)+instance {-# OVERLAPS #-} PPGenericOverride TH.BndrVis where ppGenericOverride = gpretty . from #endif instance {-# OVERLAPS #-}@@ -387,35 +394,6 @@ , PPGenericOverrideToPretty b , PPGenericOverrideToPretty c )---- instance {-# OVERLAPS #-}--- ( PPGenericOverride a--- , PPGenericOverride b--- , PPGenericOverride c--- , PPGenericOverride d--- ) => PPGenericOverride (a, b, c, d) where--- ppGenericOverride (a, b, c, d) = atomicMetaDoc $ pretty--- ( PPGenericOverrideToPretty a--- , PPGenericOverrideToPretty b--- , PPGenericOverrideToPretty c--- , PPGenericOverrideToPretty d--- )------ instance {-# OVERLAPS #-}--- ( PPGenericOverride a--- , PPGenericOverride b--- , PPGenericOverride c--- , PPGenericOverride d--- , PPGenericOverride e--- ) => PPGenericOverride (a, b, c, d, e) where--- ppGenericOverride (a, b, c, d, e) = atomicMetaDoc $ pretty--- ( PPGenericOverrideToPretty a--- , PPGenericOverrideToPretty b--- , PPGenericOverrideToPretty c--- , PPGenericOverrideToPretty d--- , PPGenericOverrideToPretty e--- )- instance {-# OVERLAPS #-} PPGenericOverride v => PPGenericOverride (Maybe v) where ppGenericOverride =
src/Prettyprinter/MetaDoc.hs view
@@ -6,8 +6,6 @@ -- Maintainer : serg.foo@gmail.com ---------------------------------------------------------------------------- -{-# LANGUAGE ScopedTypeVariables #-}- module Prettyprinter.MetaDoc ( DocKind(..) , MetaDoc
src/Prettyprinter/Show.hs view
@@ -10,7 +10,10 @@ {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-} -module Prettyprinter.Show (ppShow) where+module Prettyprinter.Show+ ( ppShow+ , PPShow(..)+ ) where import Data.Text qualified as T import Prettyprinter@@ -18,6 +21,30 @@ import Prettyprinter.Combinators import Prettyprinter.MetaDoc import Text.Show.Pretty (parseValue, Value(..))++-- $setup+-- >>> :set -XDerivingVia+-- >>> import Data.IntMap (IntMap)+-- >>> import Data.Map.Strict (Map)+-- >>> import Data.Set (Set)++-- | Helper to use 'Show'-based prettyprinting with DerivingVia.+--+-- >>> :{+-- data TestWithDeriving a b = TestWithDeriving+-- { testSet :: Maybe (Set a)+-- , testB :: b+-- , testIntMap :: IntMap String+-- , testComplexMap :: Map (Maybe (Set Int)) (IntMap (Set String))+-- }+-- deriving (Show)+-- deriving Pretty via PPShow (TestWithDeriving a b)+-- :}+--+newtype PPShow a = PPShow { unPPShow :: a }++instance Show a => Pretty (PPShow a) where+ pretty = ppShow . unPPShow ppShow :: Show a => a -> Doc ann ppShow x =