{-|
Description : Formatting process itself
-}
module Language.Haskell.Formatter.Process.Control (format) where
import qualified Language.Haskell.Formatter.ExactCode as ExactCode
import qualified Language.Haskell.Formatter.Process.AttachComments
       as AttachComments
import qualified Language.Haskell.Formatter.Process.DetachComments
       as DetachComments
import qualified Language.Haskell.Formatter.Process.FormatActualCode
       as FormatActualCode
import qualified Language.Haskell.Formatter.Process.FormatComments
       as FormatComments
import qualified Language.Haskell.Formatter.Process.Formatter as Formatter
import qualified Language.Haskell.Formatter.Result as Result
import qualified Language.Haskell.Formatter.Style as Style

format ::
       Style.Style -> ExactCode.ExactCode -> Result.Result ExactCode.ExactCode
format :: Style -> ExactCode -> Result ExactCode
format Style
style = Formatter -> ExactCode -> Result ExactCode
Formatter.format (Formatter -> ExactCode -> Result ExactCode)
-> Formatter -> ExactCode -> Result ExactCode
forall a b. (a -> b) -> a -> b
$ Style -> Formatter
createFormatter Style
style

createFormatter :: Style.Style -> Formatter.Formatter
createFormatter :: Style -> Formatter
createFormatter Style
style
  = Formatter :: (ExactCode -> Result CommentableCode)
-> (LocatableCommentableCode -> Result LocatableCommentableCode)
-> (LocatableCommentableCode -> Result LocatableCommentableCode)
-> (LocatableCommentableCode -> Result ExactCode)
-> Formatter
Formatter.Formatter{attachComments :: ExactCode -> Result CommentableCode
Formatter.attachComments =
                          Style -> ExactCode -> Result CommentableCode
AttachComments.attachComments Style
style,
                        formatActualCode :: LocatableCommentableCode -> Result LocatableCommentableCode
Formatter.formatActualCode =
                          Style
-> LocatableCommentableCode -> Result LocatableCommentableCode
FormatActualCode.formatActualCode Style
style,
                        formatComments :: LocatableCommentableCode -> Result LocatableCommentableCode
Formatter.formatComments =
                          Style
-> LocatableCommentableCode -> Result LocatableCommentableCode
FormatComments.formatComments Style
style,
                        detachComments :: LocatableCommentableCode -> Result ExactCode
Formatter.detachComments =
                          Style -> LocatableCommentableCode -> Result ExactCode
DetachComments.detachComments Style
style}