packages feed

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)))