module Sound.MIDI.String where
import Control.Monad.Trans.State (State, runState)
unlinesS :: [ShowS] -> ShowS
unlinesS = concatS . map (. showString "\n")
concatS :: [ShowS] -> ShowS
concatS = foldr (.) id
rightS, leftS, centreS :: Int -> ShowS -> ShowS
rightS n s = showString (right n (s ""))
leftS n s = showString (left n (s ""))
centreS n s = showString (centre n (s ""))
right,left, centre :: Int -> String -> String
right n s = spaces (n length s) ++ s
left n s = s ++ spaces (n length s)
centre n s = spaces l ++ s ++ spaces (n'l)
where
n' = n length s
l = n' `div` 2
spaces :: Int -> String
spaces n = replicate (max 0 n) ' '
stateToReadS :: State String a -> ReadS a
stateToReadS state string =
[runState state string]