module Language.Haskell.Format.Stylish (autoSettings, formatter) where

import Control.Applicative
import Language.Haskell.Stylish            as Stylish

import Language.Haskell.Format.Definitions
import Language.Haskell.Format.Internal

data Settings = Settings Stylish.Config

autoSettings :: IO Settings
autoSettings = Settings <$> Stylish.loadConfig (Stylish.makeVerbose False) Nothing

formatter :: Settings -> Formatter
formatter = mkFormatter . stylish

stylish :: Settings -> HaskellSource -> Either String HaskellSource
stylish (Settings config) (HaskellSource source) =
  HaskellSource . unlines <$> Stylish.runSteps extensions Nothing steps sourceLines
  where
    sourceLines = lines source
    extensions = Stylish.configLanguageExtensions config
    steps = Stylish.configSteps config