{- | Taken from Haskore. -} 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]