table-layout-1.0.0.2: src/Text/Layout/Table/Primitives/AlignInfo.hs
module Text.Layout.Table.Primitives.AlignInfo where
import Data.Foldable (asum)
-- | Specifies the length before and after an alignment position (excluding the
-- alignment character).
data AlignInfo = AlignInfo Int (Maybe Int)
deriving (Eq, Show)
-- | Private show function.
showAI :: AlignInfo -> String
showAI (AlignInfo l optR) = "AlignInfo " ++ show l ++ " " ++ showsPrec 11 optR ""
-- | The column width when using the 'AlignInfo'.
widthAI :: AlignInfo -> Int
widthAI (AlignInfo l optR) = l + maybe 0 succ optR
-- | Produce an 'AlignInfo' that is wide enough to hold inputs of both given
-- 'AlignInfo's.
instance Semigroup AlignInfo where
AlignInfo ll lOptR <> AlignInfo rl rOptR =
AlignInfo (max ll rl) (asum [max <$> lOptR <*> rOptR, lOptR, rOptR])
instance Monoid AlignInfo where
mempty = AlignInfo 0 Nothing