{-# LANGUAGE OverloadedStrings #-} import Text.Printf import Data.List import qualified Data.Text as T import qualified Data.Text.IO as T import System.Console.GetOpt import System.Environment import System.Exit import System.IO import Aether import Aether.WikipediaPage data Flag = Verbose | Version | Summary | Help deriving (Eq, Show, Ord, Enum, Bounded) options :: [OptDescr Flag] options = [ Option ['v'] ["verbose"] (NoArg Verbose) "" , Option ['V','?'] ["version"] (NoArg Version) "" , Option ['s'] ["summary"] (NoArg Summary) "" , Option [] ["help"] (NoArg Help) "" ] parse argv = case getOpt Permute options argv of (args,ts,[]) -> do let title = if null ts then ["-"] else ts if Help `elem` args then do hPutStrLn stderr (usageInfo header options) exitWith ExitSuccess else return (nub ( args), title)-- concatMap set (_,_,errs) -> do hPutStrLn stderr (concat errs ++ usageInfo header options) exitWith (ExitFailure 1) where header = "Usage: cat [-benstuv] [file ...]" main = do -- getArgs >>= \as -> page (concat as) >>= \p -> T.putStrLn (content p) (as, title) <- getArgs >>= parse if Summary `elem` as then do (summary $ concat $ title) >>= \s -> putStrLn s else do p <- page $ concat $ title T.putStrLn (content p)