hfmt-0.2.3.0: src/Language/Haskell/Format.hs
module Language.Haskell.Format
( autoSettings
, format
, formatters
, hlint
, hindent
, stylish
, Settings
, Formatter(..)
, Suggestion(..)
, HaskellSource(..)
, Reformatted(..)
) where
import qualified Language.Haskell.Format.HIndent as HIndent
import qualified Language.Haskell.Format.HLint as HLint
import qualified Language.Haskell.Format.Stylish as Stylish
import Language.Haskell.Format.Types
data Settings =
Settings
autoSettings :: IO Settings
autoSettings = return Settings
hlint :: Settings -> IO Formatter
hlint _ = HLint.suggester <$> HLint.autoSettings
hindent :: Settings -> IO Formatter
hindent _ = HIndent.formatter <$> HIndent.autoSettings
stylish :: Settings -> IO Formatter
stylish _ = Stylish.formatter <$> Stylish.autoSettings
errorFor :: String -> Formatter -> Formatter
errorFor name (Formatter formatter) =
Formatter $ \source -> prefixName (formatter source)
where
prefixName (Left err) = Left ("Error in " ++ name ++ ": " ++ err)
prefixName (Right a) = Right a
formatters :: Settings -> IO [Formatter]
formatters s = traverse (\(name, f) -> fmap (errorFor name) (f s)) named
where
named =
[("hlint", hlint), ("hindent", hindent), ("stylish-haskell", stylish)]
format :: Formatter -> HaskellSource -> Either String Reformatted
format = unFormatter