packages feed

table-layout 1.0.0.2 → 1.0.0.3

raw patch · 28 files changed

+113/−39 lines, 28 filesdep ~QuickCheckdep ~doclayoutdep ~textsetup-changedPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: QuickCheck, doclayout, text

API changes (from Hackage documentation)

- Text.Layout.Table.LineStyle: instance Data.Default.Internal.Default Text.Layout.Table.LineStyle.LineStyle
- Text.Layout.Table.Pandoc: instance Data.Default.Internal.Default Text.Layout.Table.Pandoc.PandocSeparator
- Text.Layout.Table.Spec.AlignSpec: instance Data.Default.Internal.Default Text.Layout.Table.Spec.AlignSpec.AlignSpec
- Text.Layout.Table.Spec.ColSpec: instance Data.Default.Internal.Default Text.Layout.Table.Spec.ColSpec.ColSpec
- Text.Layout.Table.Spec.CutMark: instance Data.Default.Internal.Default Text.Layout.Table.Spec.CutMark.CutMark
- Text.Layout.Table.Spec.HeaderColSpec: instance Data.Default.Internal.Default Text.Layout.Table.Spec.HeaderColSpec.HeaderColSpec
- Text.Layout.Table.Spec.HeaderSpec: instance Data.Default.Internal.Default sep => Data.Default.Internal.Default (Text.Layout.Table.Spec.HeaderSpec.HeaderSpec sep a)
- Text.Layout.Table.Spec.LenSpec: instance Data.Default.Internal.Default Text.Layout.Table.Spec.LenSpec.LenSpec
- Text.Layout.Table.Spec.Position: instance Data.Default.Internal.Default (Text.Layout.Table.Spec.Position.Position orientation)
+ Text.Layout.Table.LineStyle: instance Data.Default.Class.Default Text.Layout.Table.LineStyle.LineStyle
+ Text.Layout.Table.Pandoc: instance Data.Default.Class.Default Text.Layout.Table.Pandoc.PandocSeparator
+ Text.Layout.Table.Spec.AlignSpec: instance Data.Default.Class.Default Text.Layout.Table.Spec.AlignSpec.AlignSpec
+ Text.Layout.Table.Spec.ColSpec: instance Data.Default.Class.Default Text.Layout.Table.Spec.ColSpec.ColSpec
+ Text.Layout.Table.Spec.CutMark: instance Data.Default.Class.Default Text.Layout.Table.Spec.CutMark.CutMark
+ Text.Layout.Table.Spec.HeaderColSpec: instance Data.Default.Class.Default Text.Layout.Table.Spec.HeaderColSpec.HeaderColSpec
+ Text.Layout.Table.Spec.HeaderSpec: instance Data.Default.Class.Default sep => Data.Default.Class.Default (Text.Layout.Table.Spec.HeaderSpec.HeaderSpec sep a)
+ Text.Layout.Table.Spec.LenSpec: instance Data.Default.Class.Default Text.Layout.Table.Spec.LenSpec.LenSpec
+ Text.Layout.Table.Spec.Position: instance Data.Default.Class.Default (Text.Layout.Table.Spec.Position.Position orientation)

Files

CHANGELOG.md view
@@ -2,7 +2,19 @@  ## [Unreleased] +## [1.0.0.3] - 2026-11-07++### Added++- Add GitHub Actions continuous integration with GHC 9.14.+- Declare `hspec-discover` as an explicit test build tool.+ ### Changed++- Require Cabal 2.0 to support the explicit build-tool declaration.+- Raise the upper bounds of `doclayout` and `QuickCheck`.+- Add an upper bound for `text`.+- Improve Haddock coverage and repair documentation links.  ## [1.0.0.2] - 2025-05-18 
− Setup.hs
@@ -1,2 +0,0 @@-import Distribution.Simple-main = defaultMain
src/Text/Layout/Table.hs view
@@ -253,6 +253,7 @@ gridString :: Cell a => [ColSpec] -> [Row a] -> String gridString = gridStringB +-- | Concatenate rendered lines with newline characters between them. concatLines :: StringBuilder b => [b] -> b concatLines = mconcat . intersperse (charB '\n') 
src/Text/Layout/Table/Cell.hs view
@@ -2,6 +2,7 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE RecordWildCards   #-} +-- | Cell measurement, padding, trimming, and alignment primitives. module Text.Layout.Table.Cell where  import Control.Monad (join)@@ -142,7 +143,7 @@ -- -- Used to define instances of 'Cell'. buildCellViewLRHelper :: StringBuilder b-                      => (a -> b)  -- ^ Builder function for 'a'.+                      => (a -> b)  -- ^ Builder function for @a@.                       -> (Int -> a -> a)  -- ^ Function for trimming on the left.                       -> (Int -> a -> a)  -- ^ Function for trimming on the right.                       -> CellView a@@ -156,7 +157,7 @@ -- Used to define instanced of 'Cell'. buildCellViewBothHelper     :: StringBuilder b-    => (a -> b)  -- ^ Builder function for 'a'.+    => (a -> b)  -- ^ Builder function for @a@.     -> (Int -> Int -> a -> a)  -- ^ Function for trimming on the left and right simultaneously.     -> CellView a     -> b@@ -168,7 +169,7 @@ -- Used to define instances of 'Cell'. buildCellViewHelper     :: StringBuilder b-    => (a -> b)  -- ^ Builder function for 'a'.+    => (a -> b)  -- ^ Builder function for @a@.     -> (Int -> a -> b)  -- ^ Function for trimming on the left.     -> (Int -> a -> b)  -- ^ Function for trimming on the right.     -> (Int -> Int -> a -> b)  -- ^ Function for trimming on the left and right simultaneously.@@ -264,10 +265,10 @@   where     k = visibleLength c --- | If the given text is too long, it will be trimmed to length `upper`+-- | If the given text is too long, it will be trimmed to length @upper@ -- according to the position specification, and cut marks will be added to -- indicate that the column has been trimmed in length. Otherwise, if--- the given text is too short, it will be padded to length `lower`.+-- the given text is too short, it will be padded to length @lower@. -- -- >>> let cm = singleCutMark ".." -- >>> buildCellMod cm $ trimOrPadBetween left cm 7 10 "A longer text." :: String@@ -285,8 +286,8 @@     :: Cell a     => Position o     -> CutMark-    -> Int  -- ^ The length `lower` to pad to if too short-    -> Int  -- ^ The length `upper` to trim to if too long+    -> Int  -- ^ The length @lower@ to pad to if too short+    -> Int  -- ^ The length @upper@ to trim to if too long     -> a     -> CellMod a trimOrPadBetween p cutMark lower upper c@@ -341,24 +342,28 @@ align oS (AlignInfo ln optRN) c = case measureAlignment (predicate oS) c of     AlignInfo lk optRK -> padCell (truncateNegative $ ln - lk) (truncateNegative $ maybe 0 succ optRN - maybe 0 succ optRK) c +-- | Padding or trimming required on one side of a cell. data CutAction     = FillCA Int     | CutCA Int     | NoneCA     deriving (Eq, Show) +-- | Convert a cut action to its signed space adjustment. surplusSpace :: CutAction -> Int surplusSpace ca = case ca of     CutCA n  -> negate n     FillCA n -> n     _        -> 0 +-- | Determine how to reconcile a required width with an actual width. determineCutAction :: Int -> Int -> CutAction determineCutAction requiredW actualW = case compare requiredW actualW of     LT -> CutCA $ actualW - requiredW     EQ -> NoneCA     GT -> FillCA $ requiredW - actualW +-- | Actions required after comparing a visible range with a cell range. data CutInfo     -- | Apply a cut action to each side.     = SidesCI CutAction CutAction@@ -385,6 +390,8 @@     s = surplusSpace ca     r = cellLen - cutAmount +-- | Convert cut information into a concrete cell modification, distributing+-- available cut-mark space between the affected sides. applyCutInfo     :: Cell a     => CutInfo
src/Text/Layout/Table/Cell/Formatted.hs view
@@ -26,6 +26,8 @@ import Text.Layout.Table.Cell import Text.Layout.Table.StringBuilder +-- | Content interleaved with backend-specific prefix and suffix formatting+-- directives. data Formatted a     = Empty     | Concat [Formatted a]
src/Text/Layout/Table/Cell/WideString.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE GeneralisedNewtypeDeriving #-} {-# LANGUAGE MultiWayIf                 #-} {-# LANGUAGE OverloadedStrings          #-}+-- | Cell wrappers that measure Unicode characters by display width. module Text.Layout.Table.Cell.WideString     ( WideString(..)     , WideText(..)@@ -13,7 +14,7 @@ import Text.Layout.Table.Cell import Text.Layout.Table.Primitives.AlignInfo --- | A newtype for String in which characters can be wider than one space.+-- | A newtype for 'String' in which characters can be wider than one space. newtype WideString = WideString String     deriving (Eq, Ord, Show, Read, Semigroup, Monoid, IsString) @@ -47,7 +48,8 @@         []      -> Nothing         _ : rs' -> Just $ realLength rs' --- | A newtype for Text in which characters can be wider than one space.+-- | A newtype for strict 'T.Text' in which characters can be wider than one+-- space. newtype WideText = WideText T.Text     deriving (Eq, Ord, Show, Read, Semigroup, Monoid, IsString) 
src/Text/Layout/Table/Justify.hs view
@@ -1,5 +1,5 @@ -- | Produce justified text, which is spread over multiple rows. For a simple--- cut, 'chunksOf' from the `split` package is best suited.+-- cut, the @chunksOf@ function from the @split@ package is best suited. {-# LANGUAGE MultiWayIf #-} {-# LANGUAGE RecordWildCards #-} module Text.Layout.Table.Justify@@ -103,8 +103,8 @@     go y []        = [g y]     go y (y' : ys) = f y : go y' ys --- | Spread out spaces with different widths more evenly (in comparison to--- 'dimorphicSpaces').+-- | Spread out spaces with different widths more evenly than grouping all+-- wider spaces before the narrower ones. mixedDimorphicSpaces :: Int -> Int -> [String] mixedDimorphicSpaces = mixedDimorphicSummandsBy spaces @@ -118,6 +118,8 @@ dimorphicSummands :: Int -> Int -> [Int] dimorphicSummands = dimorphicSummandsBy id +-- | Split a number into almost-equal summands and transform each summand.+-- Larger summands precede smaller ones. dimorphicSummandsBy :: (Int -> a) -> Int -> Int -> [a] dimorphicSummandsBy _ _ 0      = [] dimorphicSummandsBy f n splits = replicate r largeS ++ replicate (splits - r) smallS
src/Text/Layout/Table/LineStyle.hs view
@@ -1,3 +1,4 @@+-- | Line styles and join characters for drawing ASCII and Unicode tables. module Text.Layout.Table.LineStyle     ( -- * Line Styling       LineStyle(..)@@ -217,11 +218,11 @@ -- -- Not all joins are fully supported by Unicode, and in these cases we try to -- gracefully substitute a similar character.--- - Any join consisting solely of 'NoJoin', 'Light, and 'Heavy' is fully supported.--- - Most joins consisting solely of 'NoJoin', 'Light, and 'Double' are supported.---   For those that aren't, we substitute 'Heavy' for 'Double'.--- - Any join which has both 'Heavy' and 'Double' is unsupported, and we---   substitute 'Heavy' for 'Double'.+-- - Any join consisting solely of @NoJoin@, @Light@, and @Heavy@ is fully supported.+-- - Most joins consisting solely of @NoJoin@, @Light@, and @Double@ are supported.+--   For those that aren't, we substitute @Heavy@ for @Double@.+-- - Any join which has both @Heavy@ and @Double@ is unsupported, and we+--   substitute @Heavy@ for @Double@. uJoins :: UnicodeJoin -> UnicodeJoin -> UnicodeJoin -> UnicodeJoin -> Char -- All NoJoin, 1 case uJoins NoJoin NoJoin NoJoin NoJoin = ' '
src/Text/Layout/Table/Primitives/AlignInfo.hs view
@@ -1,3 +1,4 @@+-- | Measurements used to align cells around a matching character. module Text.Layout.Table.Primitives.AlignInfo where  import Data.Foldable (asum)
src/Text/Layout/Table/Primitives/Basic.hs view
@@ -29,18 +29,25 @@  import Text.Layout.Table.Spec.CutMark +-- | Produce the requested number of spaces. spaces :: Int -> String spaces = flip replicate ' ' +-- | Pad the beginning of a list to a target length, given its current length. fillStart' :: a -> Int -> Int -> [a] -> [a] fillStart' x i lenL l = replicate (i - lenL) x ++ l +-- | Pad the beginning of a list to a target length. fillStart :: a -> Int -> [a] -> [a] fillStart x i l = fillStart' x i (length l) l +-- | Pad the end of a list to a target length. fillEnd :: a -> Int -> [a] -> [a] fillEnd x i l = take i $ l ++ repeat x +-- | Pad both ends of a list to a target length, given its current length.+-- When an odd number of elements is required, the beginning receives the+-- extra element. fillBoth' :: a -> Int -> Int -> [a] -> [a] fillBoth' x i lenL l =      -- Puts more on the beginning if odd.@@ -50,9 +57,11 @@     missing = i - lenL     (q, r)  = missing `divMod` 2 +-- | Pad both ends of a list to a target length. fillBoth :: a -> Int -> [a] -> [a] fillBoth x i l = fillBoth' x i (length l) l +-- | Pad the left of a 'String' to a target length, given its current length. fillLeft' :: Int -> Int -> String -> String fillLeft' = fillStart' ' ' @@ -64,6 +73,7 @@ fillRight :: Int -> String -> String fillRight = fillEnd ' ' +-- | Pad both sides of a 'String' to a target length, given its current length. fillCenter' :: Int -> Int -> String -> String fillCenter' = fillBoth' ' ' 
src/Text/Layout/Table/Primitives/CellMod.hs view
@@ -1,8 +1,9 @@ {-# LANGUAGE DeriveFunctor #-}+-- | A declarative description of padding and trimming applied to a cell. module Text.Layout.Table.Primitives.CellMod where  -- | Provide all the information necessary to compare resulting dimensions and--- to turn it into a 'StringBuilder'.+-- to turn it into a string builder. data CellMod a =     CellMod     { baseCellCM :: a@@ -41,6 +42,8 @@ trimCellRight rightTrim rightCMLen =     trimCell 0 rightTrim 0 rightCMLen +-- | Construct a cell modification with explicit adjustments and cut-mark+-- lengths for the left and right sides. modifyCellWithCutMarkLen :: Int -> Int -> Int -> Int -> a -> CellMod a modifyCellWithCutMarkLen la ra lc rc c = CellMod c la ra lc rc @@ -49,6 +52,7 @@ modifyCell :: Int -> Int -> a -> CellMod a modifyCell la ra = modifyCellWithCutMarkLen la ra 0 0 +-- | Keep a cell unchanged. keepCell :: a -> CellMod a keepCell = modifyCellWithCutMarkLen 0 0 0 0 
src/Text/Layout/Table/Primitives/ColumnModifier.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE RankNTypes #-}+-- | Derivation and application of uniform column modifications. module Text.Layout.Table.Primitives.ColumnModifier where  import Control.Arrow ((&&&))@@ -79,7 +80,7 @@ fitTitlesCMI = zipWith3 ensureWidthOfCMI  -- | Generates a function which modifies a given cell according to--- 'Text.Layout.Table.Position.Position', 'CutMark' and 'ColModInfo'. This is+-- 'Position', 'CutMark' and 'ColModInfo'. This is -- used to modify a single cell of a column to bring all cells of a column to -- the same width. columnModifier@@ -98,6 +99,7 @@ deriveAlignInfo :: Cell a => OccSpec -> a -> AlignInfo deriveAlignInfo occSpec = measureAlignment (predicate occSpec) +-- | Extract the length and alignment policies from column specifications. unpackColSpecs :: [ColSpec] -> [(LenSpec, AlignSpec)] unpackColSpecs = fmap $ lenSpec &&& alignSpec 
src/Text/Layout/Table/Primitives/Header.hs view
@@ -1,3 +1,4 @@+-- | Applying header-column specifications to derived column widths. module Text.Layout.Table.Primitives.Header where  import Data.Maybe
src/Text/Layout/Table/Primitives/Table.hs view
@@ -11,7 +11,7 @@   -- | Draw a horizontal line that will use the provided delimiters around--- the content appropriately and visually separate by 'hSpace'.+-- the content appropriately and visually separate by @hSpace@. horizontalDetailLine     :: StringBuilder b     => String                            -- ^ The space characters that are used as padding.
src/Text/Layout/Table/Spec/AlignSpec.hs view
@@ -1,3 +1,4 @@+-- | Policies for aligning cells at matching characters. module Text.Layout.Table.Spec.AlignSpec     ( AlignSpec(..)     , noAlign
src/Text/Layout/Table/Spec/ColSpec.hs view
@@ -1,3 +1,4 @@+-- | Complete layout specifications for table columns. module Text.Layout.Table.Spec.ColSpec     ( ColSpec     , lenSpec@@ -23,9 +24,13 @@ data ColSpec     = ColSpec     { lenSpec     :: LenSpec+      -- ^ Policy for choosing the column width.     , position    :: Position H+      -- ^ Horizontal position of cell content.     , alignSpec   :: AlignSpec+      -- ^ Character-alignment policy for the column.     , cutMark     :: CutMark+      -- ^ Marks used when cell content is trimmed.     }  instance Default ColSpec where
src/Text/Layout/Table/Spec/CutMark.hs view
@@ -1,4 +1,5 @@ -- TODO rename cut marks (they are too long)+-- | Cut marks used to indicate content trimmed from table cells. module Text.Layout.Table.Spec.CutMark     ( CutMark     , doubleCutMark@@ -17,7 +18,9 @@ data CutMark     = CutMark     { leftMark  :: String+      -- ^ Mark displayed when content is removed from the left.     , rightMark :: String+      -- ^ Mark displayed when content is removed from the right.     } deriving (Show, Eq)  -- | A single ellipsis unicode character is used to show cut marks.
src/Text/Layout/Table/Spec/HeaderColSpec.hs view
@@ -1,3 +1,4 @@+-- | Specifications for positioning and trimming header cells. module Text.Layout.Table.Spec.HeaderColSpec where  import Data.Default.Class
src/Text/Layout/Table/Spec/HeaderSpec.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE DeriveTraversable #-} +-- | Hierarchical specifications for optional row and column headers. module Text.Layout.Table.Spec.HeaderSpec where  import Data.Bifunctor
src/Text/Layout/Table/Spec/LenSpec.hs view
@@ -1,3 +1,4 @@+-- | Policies for choosing the rendered width of a column. module Text.Layout.Table.Spec.LenSpec     ( LenSpec (..)     , expand
src/Text/Layout/Table/Spec/OccSpec.hs view
@@ -1,3 +1,4 @@+-- | Specifications for locating an occurrence used for cell alignment. module Text.Layout.Table.Spec.OccSpec     ( OccSpec     , predOccSpec@@ -10,6 +11,7 @@ -- | Specifies an occurence of a letter. data OccSpec = OccSpec (Char -> Bool) Int +-- | Extract the character predicate from an occurrence specification. predicate :: OccSpec -> (Char -> Bool) predicate (OccSpec p _) = p 
src/Text/Layout/Table/Spec/Position.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE EmptyDataDecls #-}+-- | Horizontal and vertical positions used when laying out cells. module Text.Layout.Table.Spec.Position where  import Data.Default.Class@@ -37,17 +38,22 @@ -- | Vertical orientation. data V +-- | Position content at the left edge. left :: Position H left = Start +-- | Position content at the right edge. right :: Position H right = End +-- | Position content in the center of either orientation. center :: Position orientation center = Center +-- | Position content at the top edge. top :: Position V top = Start +-- | Position content at the bottom edge. bottom :: Position V bottom = End
src/Text/Layout/Table/Spec/RowGroup.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveFoldable #-}+-- | Row groups and their column-oriented representations. module Text.Layout.Table.Spec.RowGroup where  import Text.Layout.Table.Spec.Util@@ -36,15 +37,18 @@         r : _ -> void r         []    -> [] +-- | One vertically arranged segment obtained from a particular kind of+-- 'RowGroup'. data ColumnSegment a     = SingleValueSegment a     | ColumnSegment (Col a)     | NullableColumnSegment (Col (Maybe a))     deriving (Functor, Foldable, Eq, Show) +-- | A column split into segments that retain the grouping of its source rows. newtype SegmentedColumn a = SegmentedColumn [ColumnSegment a] deriving (Functor, Foldable, Eq, Show) --- | Break down several 'RowGroups', which conceptually form a column by+-- | Break down several 'RowGroup' values, which conceptually form a column by -- themselves, into a list of columns. transposeRowGroups :: Col (RowGroup a) -> [SegmentedColumn a] transposeRowGroups = fmap SegmentedColumn . transpose . map transposeRowGroup
src/Text/Layout/Table/Spec/TableSpec.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE RecordWildCards #-}+-- | Complete specifications combining columns, headers, style, and row groups. module Text.Layout.Table.Spec.TableSpec where  import Data.Default.Class
src/Text/Layout/Table/Spec/Util.hs view
@@ -1,3 +1,4 @@+-- | List aliases used to distinguish horizontal rows from vertical columns. module Text.Layout.Table.Spec.Util where  -- | An alias for lists, conceptually for values with a horizontal arrangement.
src/Text/Layout/Table/StringBuilder.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE FlexibleInstances #-}+-- | Builders used as output targets when rendering tables. module Text.Layout.Table.StringBuilder where  import Data.Semigroup@@ -13,7 +14,7 @@     -- | Create a builder with a single 'Char'.     charB :: Char -> a -    -- | Create a builder with a 'Text'.+    -- | Create a builder with strict 'T.Text'.     textB :: T.Text -> a     textB = stringB . T.unpack 
src/Text/Layout/Table/Style.hs view
@@ -235,19 +235,21 @@     , groupBottom       = groupStyle     } --- Generate an ASCII 'TableStyle' from a 'TableStyleSpec' using pluses for joins.+-- | Generate an ASCII 'TableStyle' from a 'TableStyleSpec' using pluses for+-- joins. asciiTableStyleFromSpec :: TableStyleSpec -> TableStyle LineStyle LineStyle asciiTableStyleFromSpec = tableStyleFromSpec asciiHorizontal asciiVertical asciiJoinString4 --- Generate an ASCII 'TableStyle' from a 'TableStyleSpec' using rounded joins.+-- | Generate an ASCII 'TableStyle' from a 'TableStyleSpec' using rounded+-- joins. roundedAsciiTableStyleFromSpec :: TableStyleSpec -> TableStyle LineStyle LineStyle roundedAsciiTableStyleFromSpec = tableStyleFromSpec asciiHorizontal asciiVertical roundedAsciiJoinString4 --- Generate a unicode 'TableStyle' from a 'TableStyleSpec'.+-- | Generate a Unicode 'TableStyle' from a 'TableStyleSpec'. unicodeTableStyleFromSpec :: TableStyleSpec -> TableStyle LineStyle LineStyle unicodeTableStyleFromSpec = tableStyleFromSpec unicodeHorizontal unicodeVertical unicodeJoinString4 --- | Generate a 'TableStyle from a given 'TableStyleSpec', along with functions+-- | Generate a 'TableStyle' from a given 'TableStyleSpec', along with functions -- to construct horizontal and vertical lines and joins. -- The function for constructing join strings takes its arguments in the order -- west, east, north, south.
table-layout.cabal view
@@ -6,7 +6,7 @@ -- PVP summary:      +-+------- breaking API changes --                   | | +----- non-breaking API additions --                   | | | +--- code changes with no API change-version:             1.0.0.2+version:             1.0.0.3  synopsis:            Format tabular data as grid or table. @@ -41,14 +41,15 @@ build-type:            Simple -- Extra files to be distributed with the package, such as examples or a  -- README.-extra-source-files:    README.md, CHANGELOG.md+extra-source-files:    README.md+extra-doc-files:       CHANGELOG.md  -- Constraint on the version of Cabal needed to build this package.-cabal-version:         >=1.10+cabal-version:         2.0  source-repository head     type:              git-    location:          git://github.com/muesli4/table-layout.git+    location:          https://github.com/muesli4/table-layout.git   library@@ -95,8 +96,8 @@   -- Other library packages from which modules are imported.   build-depends:       base >=4.9 && <5,                        data-default-class >=0.1.2 && < 0.3,-                       doclayout >=0.3 && <0.6,-                       text+                       doclayout >=0.3 && <0.7,+                       text <2.2    hs-source-dirs:      src   @@ -107,8 +108,8 @@   main-is:             Test.hs   build-depends:       base >=4.9 && <5,                        data-default-class >=0.1.2 && < 0.3,-                       doclayout >=0.3 && <0.6,-                       text+                       doclayout >=0.3 && <0.7,+                       text <2.2   hs-source-dirs:      src   other-modules:       Text.Layout.Table,                        Text.Layout.Table.Cell,@@ -146,12 +147,13 @@   hs-source-dirs:      test-suite, src   main-is:             Spec.hs   build-depends:       base >=4.9 && <5,-                       QuickCheck >=2.8 && < 2.16,+                       QuickCheck >=2.8 && < 2.20,                        HUnit >=1.3,                        data-default-class >=0.1.2 && < 0.3,-                       doclayout >=0.3 && <0.6,-                       text,+                       doclayout >=0.3 && <0.7,+                       text <2.2,                        hspec+  build-tool-depends:  hspec-discover:hspec-discover >=2 && <3    other-modules:       TestSpec,