module HIndent.Pretty.Combinators.Lineup
(
hvTuple
, hvTuple'
, hTuple
, vTuple
, vTuple'
, hPromotedTuple
,
hvUnboxedTuple'
, hUnboxedTuple
,
hvUnboxedSum'
,
hvFields
, hFields
, vFields
, vFields'
,
hList
, vList
, hvPromotedList
,
hvBarSep
, hBarSep
, vBarSep
,
hvCommaSep
, hCommaSep
, vCommaSep
,
spaced
, lined
, blanklined
, hDotSep
, spacePrefixed
, newlinePrefixed
, prefixedLined
, inter
) where
import Control.Monad
import Data.List
import HIndent.Pretty.Combinators.Indent
import HIndent.Pretty.Combinators.String
import HIndent.Pretty.Combinators.Switch
import HIndent.Pretty.Combinators.Wrap
import HIndent.Printer
hvTuple :: [Printer ()] -> Printer ()
hvTuple :: [Printer ()] -> Printer ()
hvTuple = Printer () -> Printer () -> Printer ()
forall a. Printer a -> Printer a -> Printer a
(<-|>) (Printer () -> Printer () -> Printer ())
-> ([Printer ()] -> Printer ())
-> [Printer ()]
-> Printer ()
-> Printer ()
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Printer ()] -> Printer ()
hTuple ([Printer ()] -> Printer () -> Printer ())
-> ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer ()
forall a b.
([Printer ()] -> a -> b)
-> ([Printer ()] -> a) -> [Printer ()] -> b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Printer ()] -> Printer ()
vTuple
hvTuple' :: [Printer ()] -> Printer ()
hvTuple' :: [Printer ()] -> Printer ()
hvTuple' = Printer () -> Printer () -> Printer ()
forall a. Printer a -> Printer a -> Printer a
(<-|>) (Printer () -> Printer () -> Printer ())
-> ([Printer ()] -> Printer ())
-> [Printer ()]
-> Printer ()
-> Printer ()
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Printer ()] -> Printer ()
hTuple ([Printer ()] -> Printer () -> Printer ())
-> ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer ()
forall a b.
([Printer ()] -> a -> b)
-> ([Printer ()] -> a) -> [Printer ()] -> b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Printer ()] -> Printer ()
vTuple'
hTuple :: [Printer ()] -> Printer ()
hTuple :: [Printer ()] -> Printer ()
hTuple = Printer () -> Printer ()
forall a. Printer a -> Printer a
parens (Printer () -> Printer ())
-> ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Printer ()] -> Printer ()
hCommaSep
vTuple :: [Printer ()] -> Printer ()
vTuple :: [Printer ()] -> Printer ()
vTuple = (String, String) -> [Printer ()] -> Printer ()
vCommaSepWrapped (String
"(", String
")")
vTuple' :: [Printer ()] -> Printer ()
vTuple' :: [Printer ()] -> Printer ()
vTuple' = (String, String) -> [Printer ()] -> Printer ()
vCommaSepWrapped' (String
"(", String
")")
hPromotedTuple :: [Printer ()] -> Printer ()
hPromotedTuple :: [Printer ()] -> Printer ()
hPromotedTuple = Printer () -> Printer ()
forall a. Printer a -> Printer a
promotedTupleParens (Printer () -> Printer ())
-> ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Printer ()] -> Printer ()
hCommaSep
hvUnboxedTuple' :: [Printer ()] -> Printer ()
hvUnboxedTuple' :: [Printer ()] -> Printer ()
hvUnboxedTuple' = Printer () -> Printer () -> Printer ()
forall a. Printer a -> Printer a -> Printer a
(<-|>) (Printer () -> Printer () -> Printer ())
-> ([Printer ()] -> Printer ())
-> [Printer ()]
-> Printer ()
-> Printer ()
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Printer ()] -> Printer ()
hUnboxedTuple ([Printer ()] -> Printer () -> Printer ())
-> ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer ()
forall a b.
([Printer ()] -> a -> b)
-> ([Printer ()] -> a) -> [Printer ()] -> b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Printer ()] -> Printer ()
vUnboxedTuple'
hUnboxedTuple :: [Printer ()] -> Printer ()
hUnboxedTuple :: [Printer ()] -> Printer ()
hUnboxedTuple = Printer () -> Printer ()
forall a. Printer a -> Printer a
unboxedParens (Printer () -> Printer ())
-> ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Printer ()] -> Printer ()
hCommaSep
vUnboxedTuple' :: [Printer ()] -> Printer ()
vUnboxedTuple' :: [Printer ()] -> Printer ()
vUnboxedTuple' = (String, String) -> [Printer ()] -> Printer ()
vCommaSepWrapped' (String
"(#", String
" #)")
hvUnboxedSum' :: [Printer ()] -> Printer ()
hvUnboxedSum' :: [Printer ()] -> Printer ()
hvUnboxedSum' = Printer () -> Printer () -> Printer ()
forall a. Printer a -> Printer a -> Printer a
(<-|>) (Printer () -> Printer () -> Printer ())
-> ([Printer ()] -> Printer ())
-> [Printer ()]
-> Printer ()
-> Printer ()
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Printer ()] -> Printer ()
hUnboxedSum ([Printer ()] -> Printer () -> Printer ())
-> ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer ()
forall a b.
([Printer ()] -> a -> b)
-> ([Printer ()] -> a) -> [Printer ()] -> b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Printer ()] -> Printer ()
vUnboxedSum'
hUnboxedSum :: [Printer ()] -> Printer ()
hUnboxedSum :: [Printer ()] -> Printer ()
hUnboxedSum = Printer () -> Printer ()
forall a. Printer a -> Printer a
unboxedParens (Printer () -> Printer ())
-> ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Printer ()] -> Printer ()
hBarSep
vUnboxedSum' :: [Printer ()] -> Printer ()
vUnboxedSum' :: [Printer ()] -> Printer ()
vUnboxedSum' = Char -> (String, String) -> [Printer ()] -> Printer ()
vWrappedLineup' Char
'|' (String
"(#", String
" #)")
hvFields :: [Printer ()] -> Printer ()
hvFields :: [Printer ()] -> Printer ()
hvFields = Printer () -> Printer () -> Printer ()
forall a. Printer a -> Printer a -> Printer a
(<-|>) (Printer () -> Printer () -> Printer ())
-> ([Printer ()] -> Printer ())
-> [Printer ()]
-> Printer ()
-> Printer ()
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Printer ()] -> Printer ()
hFields ([Printer ()] -> Printer () -> Printer ())
-> ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer ()
forall a b.
([Printer ()] -> a -> b)
-> ([Printer ()] -> a) -> [Printer ()] -> b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Printer ()] -> Printer ()
vFields
hFields :: [Printer ()] -> Printer ()
hFields :: [Printer ()] -> Printer ()
hFields = Printer () -> Printer ()
forall a. Printer a -> Printer a
braces (Printer () -> Printer ())
-> ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Printer ()] -> Printer ()
hCommaSep
vFields :: [Printer ()] -> Printer ()
vFields :: [Printer ()] -> Printer ()
vFields = (String, String) -> [Printer ()] -> Printer ()
vCommaSepWrapped (String
"{", String
"}")
vFields' :: [Printer ()] -> Printer ()
vFields' :: [Printer ()] -> Printer ()
vFields' = (String, String) -> [Printer ()] -> Printer ()
vCommaSepWrapped' (String
"{", String
"}")
hList :: [Printer ()] -> Printer ()
hList :: [Printer ()] -> Printer ()
hList = Printer () -> Printer ()
forall a. Printer a -> Printer a
brackets (Printer () -> Printer ())
-> ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Printer ()] -> Printer ()
hCommaSep
vList :: [Printer ()] -> Printer ()
vList :: [Printer ()] -> Printer ()
vList = (String, String) -> [Printer ()] -> Printer ()
vCommaSepWrapped (String
"[", String
"]")
hvPromotedList :: [Printer ()] -> Printer ()
hvPromotedList :: [Printer ()] -> Printer ()
hvPromotedList = Printer () -> Printer () -> Printer ()
forall a. Printer a -> Printer a -> Printer a
(<-|>) (Printer () -> Printer () -> Printer ())
-> ([Printer ()] -> Printer ())
-> [Printer ()]
-> Printer ()
-> Printer ()
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Printer ()] -> Printer ()
hPromotedList ([Printer ()] -> Printer () -> Printer ())
-> ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer ()
forall a b.
([Printer ()] -> a -> b)
-> ([Printer ()] -> a) -> [Printer ()] -> b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Printer ()] -> Printer ()
vPromotedList
hPromotedList :: [Printer ()] -> Printer ()
hPromotedList :: [Printer ()] -> Printer ()
hPromotedList = Printer () -> Printer ()
forall a. Printer a -> Printer a
promotedListBrackets (Printer () -> Printer ())
-> ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Printer ()] -> Printer ()
hCommaSep
vPromotedList :: [Printer ()] -> Printer ()
vPromotedList :: [Printer ()] -> Printer ()
vPromotedList = (String, String) -> [Printer ()] -> Printer ()
vCommaSepWrapped (String
"'[", String
" ]")
spaced :: [Printer ()] -> Printer ()
spaced :: [Printer ()] -> Printer ()
spaced = Printer () -> [Printer ()] -> Printer ()
inter Printer ()
space
lined :: [Printer ()] -> Printer ()
lined :: [Printer ()] -> Printer ()
lined = Printer () -> [Printer ()] -> Printer ()
inter Printer ()
newline
blanklined :: [Printer ()] -> Printer ()
blanklined :: [Printer ()] -> Printer ()
blanklined = Printer () -> [Printer ()] -> Printer ()
inter Printer ()
blankline
hvBarSep :: [Printer ()] -> Printer ()
hvBarSep :: [Printer ()] -> Printer ()
hvBarSep = Printer () -> Printer () -> Printer ()
forall a. Printer a -> Printer a -> Printer a
(<-|>) (Printer () -> Printer () -> Printer ())
-> ([Printer ()] -> Printer ())
-> [Printer ()]
-> Printer ()
-> Printer ()
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Printer ()] -> Printer ()
hBarSep ([Printer ()] -> Printer () -> Printer ())
-> ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer ()
forall a b.
([Printer ()] -> a -> b)
-> ([Printer ()] -> a) -> [Printer ()] -> b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Printer ()] -> Printer ()
vBarSep
hBarSep :: [Printer ()] -> Printer ()
hBarSep :: [Printer ()] -> Printer ()
hBarSep = Printer () -> [Printer ()] -> Printer ()
inter (HasCallStack => String -> Printer ()
String -> Printer ()
string String
" | ")
vBarSep :: [Printer ()] -> Printer ()
vBarSep :: [Printer ()] -> Printer ()
vBarSep = String -> [Printer ()] -> Printer ()
prefixedLined String
"| "
hvCommaSep :: [Printer ()] -> Printer ()
hvCommaSep :: [Printer ()] -> Printer ()
hvCommaSep = Printer () -> Printer () -> Printer ()
forall a. Printer a -> Printer a -> Printer a
(<-|>) (Printer () -> Printer () -> Printer ())
-> ([Printer ()] -> Printer ())
-> [Printer ()]
-> Printer ()
-> Printer ()
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Printer ()] -> Printer ()
hCommaSep ([Printer ()] -> Printer () -> Printer ())
-> ([Printer ()] -> Printer ()) -> [Printer ()] -> Printer ()
forall a b.
([Printer ()] -> a -> b)
-> ([Printer ()] -> a) -> [Printer ()] -> b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Printer ()] -> Printer ()
vCommaSep
hCommaSep :: [Printer ()] -> Printer ()
hCommaSep :: [Printer ()] -> Printer ()
hCommaSep = Printer () -> [Printer ()] -> Printer ()
inter (HasCallStack => String -> Printer ()
String -> Printer ()
string String
", ")
vCommaSep :: [Printer ()] -> Printer ()
vCommaSep :: [Printer ()] -> Printer ()
vCommaSep = String -> [Printer ()] -> Printer ()
prefixedLined String
", "
vCommaSepWrapped :: (String, String) -> [Printer ()] -> Printer ()
vCommaSepWrapped :: (String, String) -> [Printer ()] -> Printer ()
vCommaSepWrapped = Char -> (String, String) -> [Printer ()] -> Printer ()
vWrappedLineup Char
','
vCommaSepWrapped' :: (String, String) -> [Printer ()] -> Printer ()
vCommaSepWrapped' :: (String, String) -> [Printer ()] -> Printer ()
vCommaSepWrapped' = Char -> (String, String) -> [Printer ()] -> Printer ()
vWrappedLineup' Char
','
hDotSep :: [Printer ()] -> Printer ()
hDotSep :: [Printer ()] -> Printer ()
hDotSep = Printer () -> [Printer ()] -> Printer ()
inter (HasCallStack => String -> Printer ()
String -> Printer ()
string String
".")
spacePrefixed :: [Printer ()] -> Printer ()
spacePrefixed :: [Printer ()] -> Printer ()
spacePrefixed = (Printer () -> Printer ()) -> [Printer ()] -> Printer ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (Printer ()
space Printer () -> Printer () -> Printer ()
forall a b. Printer a -> Printer b -> Printer b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>)
newlinePrefixed :: [Printer ()] -> Printer ()
newlinePrefixed :: [Printer ()] -> Printer ()
newlinePrefixed = (Printer () -> Printer ()) -> [Printer ()] -> Printer ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (Printer ()
newline Printer () -> Printer () -> Printer ()
forall a b. Printer a -> Printer b -> Printer b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>)
prefixedLined :: String -> [Printer ()] -> Printer ()
prefixedLined :: String -> [Printer ()] -> Printer ()
prefixedLined String
_ [] = () -> Printer ()
forall a. a -> Printer a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
prefixedLined String
pref (Printer ()
x:[Printer ()]
xs) = do
Printer ()
x
[Printer ()] -> (Printer () -> Printer ()) -> Printer ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ [Printer ()]
xs ((Printer () -> Printer ()) -> Printer ())
-> (Printer () -> Printer ()) -> Printer ()
forall a b. (a -> b) -> a -> b
$ \Printer ()
p -> do
Printer ()
newline
String -> Printer () -> Printer ()
prefixed String
pref Printer ()
p
vWrappedLineup :: Char -> (String, String) -> [Printer ()] -> Printer ()
vWrappedLineup :: Char -> (String, String) -> [Printer ()] -> Printer ()
vWrappedLineup Char
sep (String
prefix, String
suffix) [Printer ()]
ps =
HasCallStack => String -> Printer ()
String -> Printer ()
string String
prefix Printer () -> Printer () -> Printer ()
forall a b. Printer a -> Printer b -> Printer b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
Printer ()
space Printer () -> Printer () -> Printer ()
forall a. Printer () -> Printer a -> Printer a
|=> do
String -> [Printer ()] -> Printer ()
prefixedLined [Char
sep, Char
' '] [Printer ()]
ps
Printer ()
newline
Int64 -> Printer () -> Printer ()
forall a. Int64 -> Printer a -> Printer a
indentedWithSpace (-(Int -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (String -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
prefix) Int64 -> Int64 -> Int64
forall a. Num a => a -> a -> a
+ Int64
1)) (Printer () -> Printer ()) -> Printer () -> Printer ()
forall a b. (a -> b) -> a -> b
$ HasCallStack => String -> Printer ()
String -> Printer ()
string String
suffix
vWrappedLineup' :: Char -> (String, String) -> [Printer ()] -> Printer ()
vWrappedLineup' :: Char -> (String, String) -> [Printer ()] -> Printer ()
vWrappedLineup' Char
_ (String
prefix, String
suffix) [Printer ()
x] =
[Printer ()] -> Printer ()
spaced [HasCallStack => String -> Printer ()
String -> Printer ()
string String
prefix, Printer ()
x, HasCallStack => String -> Printer ()
String -> Printer ()
string String
suffix]
vWrappedLineup' Char
sep (String
prefix, String
suffix) [Printer ()]
ps =
HasCallStack => String -> Printer ()
String -> Printer ()
string String
prefix Printer () -> Printer () -> Printer ()
forall a b. Printer a -> Printer b -> Printer b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
Printer ()
space Printer () -> Printer () -> Printer ()
forall a. Printer () -> Printer a -> Printer a
|=> do
String -> [Printer ()] -> Printer ()
prefixedLined [Char
sep, Char
' '] [Printer ()]
ps
HasCallStack => String -> Printer ()
String -> Printer ()
string String
suffix
inter :: Printer () -> [Printer ()] -> Printer ()
inter :: Printer () -> [Printer ()] -> Printer ()
inter Printer ()
separator = [Printer ()] -> Printer ()
forall (t :: * -> *) (m :: * -> *) a.
(Foldable t, Monad m) =>
t (m a) -> m ()
sequence_ ([Printer ()] -> Printer ())
-> ([Printer ()] -> [Printer ()]) -> [Printer ()] -> Printer ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Printer () -> [Printer ()] -> [Printer ()]
forall a. a -> [a] -> [a]
intersperse Printer ()
separator