hindent-4.2.0: src/main/Main.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ViewPatterns #-}
-- | Main entry point to hindent.
--
-- hindent
module Main where
import HIndent
import Control.Applicative
import Data.Text (Text)
import qualified Data.Text as T
import qualified Data.Text.Lazy.Builder as T
import qualified Data.Text.Lazy.IO as T
import Data.Version (showVersion)
import Descriptive
import Descriptive.Options
import Paths_hindent (version)
import System.Environment
-- | Main entry point.
main :: IO ()
main =
do args <- getArgs
case consume options (map T.pack args) of
Left{} ->
error (T.unpack (textDescription (describe options [])))
Right result ->
case result of
Left{} -> putStrLn ("hindent " ++ showVersion version)
Right style -> T.interact
(either error T.toLazyText .
reformat style)
-- | Program options.
options :: Consumer [Text] Option (Either Text (Style))
options =
fmap Left (constant "--version") <|>
(fmap Right
(constant "--style" *>
foldr1 (<|>)
(map (\style ->
fmap (const style)
(constant (styleName style)))
styles)))