packages feed

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 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 @@+[![build](https://github.com/sergv/prettyprinter-combinators/actions/workflows/haskell-ci.yaml/badge.svg)](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 =