The Haskell 98 Report
top | back | next | contents | function index


23  システム関数


module System ( 
    ExitCode(ExitSuccess,ExitFailure),
    getArgs, getProgName, getEnv, system, exitWith, exitFailure
  ) where

data ExitCode = ExitSuccess | ExitFailure Int 
                deriving (Eq, Ord, Read, Show)

getArgs  :: IO [String]
getProgName  :: IO String
getEnv         :: String -> IO String
system         :: String -> IO ExitCode
exitWith    :: ExitCode -> IO a
exitFailure :: IO a

このライブラリはプログラムとオペレーティングシステムのインタラクショ ンを記述するものである。

すべての System 操作は 21.1 節 で述べたように isIllegalOperationError を発生しうる。それ以 外のすべての許されるエラーは以下に記述する。実装が操作をサポートしな い場合には、isIllegalOperationError を発生させなければならな いことに特に注意すること。

ExitCode 型はプログラムが返すことのできる脱出コードを定義す る。ExitSuccess は成功裏に終了したことを示す。 ExitFailure code はプログラムが値 code ととも に失敗したことを示す。code の正確な解釈はオペレーティングシス テム依存である。特に code の値のいくつかは禁じられている。(た とえば、 0 は POSIX 準拠のシステムでは禁じられている。)

getArgs 計算はプログラムのコマンドライン引数のリスト(プログ ラム名は含まない)を返す。getProgName 計算は起動されたプログ ラムの名前を返す。getEnv var は環境変数 var の 値を返す。もし、変数 var が定義されていなければ、 isDoesNotExistError 例外を発生する。system cmd 計算はオペレーティングシステムのプロセスがcmd を実 行したときの終了コードを返す。

exitWith code はプログラムを終了してそのプログラムの 呼び出し元に code を返す。プログラムを終了する前に先ずオープン あるいはセミクローズ状態のハンドルをクローズする。呼び出し側は好きな ようにリターンコードを解釈することが可能であるが、プログラムは通常に 完了した場合にはExitSuccess を返さなくてはならない。また、 ExitFailure n はプログラムが修復不可能な問題に出 くわしたことを意味しなければならない。exitFailure の値は exitWith (ExitFailure exitfail) の 値に等しく、exitfail は実装依存である。exitWith は I/O モナド中のエラーハンドリングをバイパスし、catch による捕 捉は不可能である。

プログラムが error を呼んだ結果あるいは値が _|_ になっ てプログラムが終了した場合には exitFailure 計算と同等の扱い となる。そうではない場合、プログラム p が明示的に exitWith を呼ぶことなく終了した場合、その扱いは以下の計算と 同じである。
(
p >> exitWith ExitSuccess) `catch` \ _ -> exitFailure


The Haskell 98 Report
top | back | next | contents | function index
December 2002