packages feed

stylish-haskell-0.1.1.0: src/Main.hs

--------------------------------------------------------------------------------
module Main
    ( main
    ) where


--------------------------------------------------------------------------------
import           Control.Applicative               ((<$>))
import           Data.Maybe                        (listToMaybe)
import           System.Environment                (getArgs)


--------------------------------------------------------------------------------
import qualified StylishHaskell.Imports
import qualified StylishHaskell.LanguagePragmas
import           StylishHaskell.Parse
import           StylishHaskell.Stylish
import qualified StylishHaskell.TrailingWhitespace


--------------------------------------------------------------------------------
runStylish :: Maybe FilePath -> Stylish -> Lines -> Lines
runStylish mfp f ls = case parseModule mfp (unlines ls) of
    Left err      -> error err  -- TODO: maybe return original lines?
    Right module' -> f ls module'


--------------------------------------------------------------------------------
chainStylish :: Maybe FilePath -> [Stylish] -> Lines -> Lines
chainStylish mfp filters = foldr (.) id filters'
  where
    filters' :: [Lines -> Lines]
    filters' = map (runStylish mfp) filters


--------------------------------------------------------------------------------
main :: IO ()
main = do
    filePath <- listToMaybe <$> getArgs
    contents <- maybe getContents readFile filePath
    putStr $ unlines $ chainStylish filePath filters $ lines contents
  where
    filters =
        [ StylishHaskell.Imports.stylish
        , StylishHaskell.LanguagePragmas.stylish
        -- , StylishHaskell.Tabs.stylish
        , StylishHaskell.TrailingWhitespace.stylish
        ]