{-# LANGUAGE GADTs #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE DeriveDataTypeable #-} {-# OPTIONS_GHC -fno-cse #-} module Phoityne.Argument ( HelpExitException(..) , ArgData(..) , config ) where -- システム import System.Console.CmdArgs import qualified Control.Exception as E -- | -- ヘルプ表示時の例外 -- data HelpExitException = HelpExitException deriving (Show, Typeable) instance E.Exception HelpExitException -- | -- コマンドライン引数データ設定 -- モードを使用する場合のサンプル -- data ArgData = ModeA { file :: String , method :: Method } | ModeB { file :: String , value :: Int } deriving (Data, Typeable, Show, Read, Eq) -- | -- アノテーション設定 -- config :: ArgData config = modes [confA, confB] &= summary sumMsg &= program "prj-tpl" where confA = ModeA { file = def &= name "f" &= name "file" &= explicit &= typFile &= help "ini file" , method = enum [ Get &= name "get" &= explicit &= help "method type Get" , Post &= name "post" &= explicit &= help " | type Post" , Put &= name "put" &= explicit &= help " | type Put" , Delete &= name "delete" &= explicit &= help " | type Delete" ] } &= name "ModeA" &= details mdAMsg &= auto confB = ModeB { file = def &= name "f" &= name "file" &= explicit &= typFile &= help "ini file" , value = def &= name "value" &= explicit &= help "integer value" } &= name "ModeB" &= details mdBMsg sumMsg = unlines [ "" , " ☆ サマリ説明 ☆" , "" , " ここに簡単な説明を記載する。" , "" ] mdAMsg = [ "" , " ★ 詳細説明 ★" , "" , " ここにModeAの詳細な説明を記載する。" , "" ] mdBMsg = [ "" , " ★ 詳細説明 ★" , "" , " ここにModeBの詳細な説明を記載する。" , "" ] -- | -- enum値引数 -- data Method = Get | Post | Put | Delete deriving (Data, Typeable, Show, Read, Eq)