Haskell-コマンドライン引数

Haskellにおけるコマンドライン引数の取得方法

getArgsの利用

Haskellにおけるコマンドラインの引数は「getArgs」を使って取得します。

getArgsを使うにはSystem(getArgs)をimportする必要があります。


$ cat args.hs 
#!/usr/bin/env runghc

import System(getArgs)
main = getArgs

実行すると、コマンドライン引数はリスト形式で格納されます。


$ ./args.hs haskell cmd args
["haskell","cmd","args"]

コマンドオプションの取得方法

引数が設定されていない場合にはusageを表示します。


$ cat args.hs 
#!/usr/bin/env runghc

import System(getArgs)

usage = putStrLn("Usage: cmd filename")

main = do
  args <- getArgs
  if length args /= 1
    then usage
    else do
      let filename = head args
      print (filename)

$ ./args.hs /usr/bin/ghc
"/usr/bin/ghc"

複数ファイル指定可能なcatコマンドの作成

引数に複数のファイル名を指定すると、対象ファイルを読み込んで標準出力します。

引数が指定されていない場合には、interact関数を用いて標準入力から入力を受け付けます。


$ ./cat cat.hs 
#!/usr/bin/env runghc

import System.Environment (getArgs)

main = do
  args <- getArgs
  if null args
    then
      interact id
    else
      mapM_ (\x -> readFile x >>= putStr) args


関連ページ