Skip to content

Commit 9f199e7

Browse files
committed
Convert display functions into Pretty instances
We have a lot of `showType` functions that are effectively a `Pretty` instance but less composable. Let's make them proper `Pretty` instances. Split off of haskell#10524
1 parent 949464d commit 9f199e7

File tree

3 files changed

+46
-46
lines changed

3 files changed

+46
-46
lines changed

cabal-install-solver/src/Distribution/Solver/Types/ConstraintSource.hs

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ module Distribution.Solver.Types.ConstraintSource
66

77
import Distribution.Solver.Compat.Prelude
88
import Distribution.Solver.Types.ProjectConfigPath (ProjectConfigPath, docProjectConfigPath)
9-
import Text.PrettyPrint (render)
9+
import Distribution.Pretty (Pretty(pretty), prettyShow)
10+
import Text.PrettyPrint (text)
1011

1112
-- | Source of a 'PackageConstraint'.
1213
data ConstraintSource =
@@ -55,31 +56,35 @@ data ConstraintSource =
5556
-- | An internal constraint due to compatibility issues with the Setup.hs
5657
-- command line interface requires a maximum upper bound on Cabal
5758
| ConstraintSetupCabalMaxVersion
58-
deriving (Eq, Show, Generic)
59+
deriving (Show, Eq, Generic)
5960

6061
instance Binary ConstraintSource
6162
instance Structured ConstraintSource
6263

6364
-- | Description of a 'ConstraintSource'.
6465
showConstraintSource :: ConstraintSource -> String
65-
showConstraintSource (ConstraintSourceMainConfig path) =
66-
"main config " ++ path
67-
showConstraintSource (ConstraintSourceProjectConfig path) =
68-
"project config " ++ render (docProjectConfigPath path)
69-
showConstraintSource (ConstraintSourceUserConfig path)= "user config " ++ path
70-
showConstraintSource ConstraintSourceCommandlineFlag = "command line flag"
71-
showConstraintSource ConstraintSourceUserTarget = "user target"
72-
showConstraintSource ConstraintSourceNonReinstallablePackage =
73-
"non-reinstallable package"
74-
showConstraintSource ConstraintSourceFreeze = "cabal freeze"
75-
showConstraintSource ConstraintSourceConfigFlagOrTarget =
76-
"config file, command line flag, or user target"
77-
showConstraintSource ConstraintSourceMultiRepl =
78-
"--enable-multi-repl"
79-
showConstraintSource ConstraintSourceProfiledDynamic =
80-
"--enable-profiling-shared"
81-
showConstraintSource ConstraintSourceUnknown = "unknown source"
82-
showConstraintSource ConstraintSetupCabalMinVersion =
83-
"minimum version of Cabal used by Setup.hs"
84-
showConstraintSource ConstraintSetupCabalMaxVersion =
85-
"maximum version of Cabal used by Setup.hs"
66+
showConstraintSource = prettyShow
67+
68+
instance Pretty ConstraintSource where
69+
pretty constraintSource = case constraintSource of
70+
(ConstraintSourceMainConfig path) ->
71+
text "main config" <+> text path
72+
(ConstraintSourceProjectConfig path) ->
73+
text "project config" <+> docProjectConfigPath path
74+
(ConstraintSourceUserConfig path)-> text "user config " <+> text path
75+
ConstraintSourceCommandlineFlag -> text "command line flag"
76+
ConstraintSourceUserTarget -> text "user target"
77+
ConstraintSourceNonReinstallablePackage ->
78+
text "non-reinstallable package"
79+
ConstraintSourceFreeze -> text "cabal freeze"
80+
ConstraintSourceConfigFlagOrTarget ->
81+
text "config file, command line flag, or user target"
82+
ConstraintSourceMultiRepl ->
83+
text "--enable-multi-repl"
84+
ConstraintSourceProfiledDynamic ->
85+
text "--enable-profiling-shared"
86+
ConstraintSourceUnknown -> text "unknown source"
87+
ConstraintSetupCabalMinVersion ->
88+
text "minimum version of Cabal used by Setup.hs"
89+
ConstraintSetupCabalMaxVersion ->
90+
text "maximum version of Cabal used by Setup.hs"

cabal-install-solver/src/Distribution/Solver/Types/PackageConstraint.hs

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@ module Distribution.Solver.Types.PackageConstraint (
1111
scopeToPackageName,
1212
constraintScopeMatches,
1313
PackageProperty(..),
14-
dispPackageProperty,
1514
PackageConstraint(..),
16-
dispPackageConstraint,
1715
showPackageConstraint,
1816
packageConstraintToDependency
1917
) where
@@ -23,7 +21,7 @@ import Prelude ()
2321

2422
import Distribution.Package (PackageName)
2523
import Distribution.PackageDescription (FlagAssignment, dispFlagAssignment)
26-
import Distribution.Pretty (flatStyle, pretty)
24+
import Distribution.Pretty (flatStyle, Pretty(pretty))
2725
import Distribution.Types.PackageVersionConstraint (PackageVersionConstraint (..))
2826
import Distribution.Version (VersionRange, simplifyVersionRange)
2927

@@ -82,12 +80,11 @@ constraintScopeMatches (ScopeAnySetupQualifier pn) (Q pp pn') =
8280
in setup pp && pn == pn'
8381
constraintScopeMatches (ScopeAnyQualifier pn) (Q _ pn') = pn == pn'
8482

85-
-- | Pretty-prints a constraint scope.
86-
dispConstraintScope :: ConstraintScope -> Disp.Doc
87-
dispConstraintScope (ScopeTarget pn) = pretty pn <<>> Disp.text "." <<>> pretty pn
88-
dispConstraintScope (ScopeQualified q pn) = dispQualifier q <<>> pretty pn
89-
dispConstraintScope (ScopeAnySetupQualifier pn) = Disp.text "setup." <<>> pretty pn
90-
dispConstraintScope (ScopeAnyQualifier pn) = Disp.text "any." <<>> pretty pn
83+
instance Pretty ConstraintScope where
84+
pretty (ScopeTarget pn) = pretty pn <<>> Disp.text "." <<>> pretty pn
85+
pretty (ScopeQualified q pn) = dispQualifier q <<>> pretty pn
86+
pretty (ScopeAnySetupQualifier pn) = Disp.text "setup." <<>> pretty pn
87+
pretty (ScopeAnyQualifier pn) = Disp.text "any." <<>> pretty pn
9188

9289
-- | A package property is a logical predicate on packages.
9390
data PackageProperty
@@ -101,32 +98,30 @@ data PackageProperty
10198
instance Binary PackageProperty
10299
instance Structured PackageProperty
103100

104-
-- | Pretty-prints a package property.
105-
dispPackageProperty :: PackageProperty -> Disp.Doc
106-
dispPackageProperty (PackagePropertyVersion verrange) = pretty verrange
107-
dispPackageProperty PackagePropertyInstalled = Disp.text "installed"
108-
dispPackageProperty PackagePropertySource = Disp.text "source"
109-
dispPackageProperty (PackagePropertyFlags flags) = dispFlagAssignment flags
110-
dispPackageProperty (PackagePropertyStanzas stanzas) =
111-
Disp.hsep $ map (Disp.text . showStanza) stanzas
101+
instance Pretty PackageProperty where
102+
pretty (PackagePropertyVersion verrange) = pretty verrange
103+
pretty PackagePropertyInstalled = Disp.text "installed"
104+
pretty PackagePropertySource = Disp.text "source"
105+
pretty (PackagePropertyFlags flags) = dispFlagAssignment flags
106+
pretty (PackagePropertyStanzas stanzas) =
107+
Disp.hsep $ map (Disp.text . showStanza) stanzas
112108

113109
-- | A package constraint consists of a scope plus a property
114110
-- that must hold for all packages within that scope.
115111
data PackageConstraint = PackageConstraint ConstraintScope PackageProperty
116112
deriving (Eq, Show)
117113

118-
-- | Pretty-prints a package constraint.
119-
dispPackageConstraint :: PackageConstraint -> Disp.Doc
120-
dispPackageConstraint (PackageConstraint scope prop) =
121-
dispConstraintScope scope <+> dispPackageProperty prop
114+
instance Pretty PackageConstraint where
115+
pretty (PackageConstraint scope prop) =
116+
pretty scope <+> pretty prop
122117

123118
-- | Alternative textual representation of a package constraint
124119
-- for debugging purposes (slightly more verbose than that
125120
-- produced by 'dispPackageConstraint').
126121
--
127122
showPackageConstraint :: PackageConstraint -> String
128123
showPackageConstraint pc@(PackageConstraint scope prop) =
129-
Disp.renderStyle flatStyle . postprocess $ dispPackageConstraint pc2
124+
Disp.renderStyle flatStyle . postprocess $ pretty pc2
130125
where
131126
pc2 = case prop of
132127
PackagePropertyVersion vr ->

cabal-install/src/Distribution/Client/Targets.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -676,7 +676,7 @@ readUserConstraint str =
676676

677677
instance Pretty UserConstraint where
678678
pretty (UserConstraint scope prop) =
679-
dispPackageConstraint $ PackageConstraint (fromUserConstraintScope scope) prop
679+
pretty $ PackageConstraint (fromUserConstraintScope scope) prop
680680

681681
instance Parsec UserConstraint where
682682
parsec = do

0 commit comments

Comments
 (0)