42 lines
1.4 KiB
Haskell
42 lines
1.4 KiB
Haskell
-- ghc-mod: Making Haskell development *more* fun
|
|
-- Copyright (C) 2015 Daniel Gröber <dxld ÄT darkboxed DOT org>
|
|
--
|
|
-- This program is free software: you can redistribute it and/or modify
|
|
-- it under the terms of the GNU Affero General Public License as published by
|
|
-- the Free Software Foundation, either version 3 of the License, or
|
|
-- (at your option) any later version.
|
|
--
|
|
-- This program is distributed in the hope that it will be useful,
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
-- GNU Affero General Public License for more details.
|
|
--
|
|
-- You should have received a copy of the GNU Affero General Public License
|
|
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
module Common where
|
|
|
|
import Control.Applicative
|
|
import Data.List
|
|
import Data.Maybe
|
|
import System.Environment
|
|
import System.IO
|
|
|
|
errMsg :: String -> IO ()
|
|
errMsg str = do
|
|
prog <- getProgName
|
|
hPutStrLn stderr $ prog ++ ": " ++ str
|
|
|
|
align :: String -> String -> String -> String
|
|
align n an str = let
|
|
h:rest = lines str
|
|
[hm] = match n h
|
|
rest' = [ move (hm - rm) r | r <- rest, rm <- match an r]
|
|
in
|
|
unlines (h:rest')
|
|
where
|
|
match p str' = maybeToList $
|
|
fst <$> find ((p `isPrefixOf`) . snd) ([0..] `zip` tails str')
|
|
move i str' | i > 0 = replicate i ' ' ++ str'
|
|
move i str' = drop i str'
|