WinHugs のプロンプトでディレクトリ操作

Haskell のプログラムをWinHugsで開発するときに、WinHugsのプロンプト上ではディレクトリ操作ができないのが不便だった。そこで、WinHugs のプロンプト上で > :edit とファイル名を省略して入力すると編集できる、WinHugs のHugs追加モジュール上にディレクトリ操作関係の関数を作成した。

-- Empty module to serve as the default current module.
module Hugs where

import Directory

pwd = getCurrentDirectory >>= print
ls path = getDirectoryContents path >>= print
cd path = setCurrentDirectory path >> getCurrentDirectory >>= print
cat fname = readFile fname >>= putStrLn

パイプをつないでいくような感覚でプログラムできるのが面白かった。文字列処理のようなプログラムもIOモナド(と言っても戻値を return でIO型にくるむだけ)で作っておけば、Unixのパイプのようなこともできるのではないだろうか。

上のプログラムを編集して、エディタを閉じると、ディレクトリ操作の関数を利用出来るようになる。関数名はUnixコマンドに準じているが、引数を””で囲んで文字列として与えなければならないのと、cat が単にテキスファイルを表示するだけの機能しかないのが違う。ディレクトリ操作関連のモジュールは、標準ではインポートしてないので、明示的にインポートした。大まかな使い方は次のようになる。

Hugs> pwd
"C:\\WinHugs"

Hugs> ls "."
[".","..","demos","docs","ffihugs.bat","ffihugs.exe","hugs.exe","include",
"install.log","oldlib","packages","programs","readme.txt","runhugs.exe",
"uninstaller.exe","winhugs.exe"]

Hugs> cd "docs"
"C:\\WinHugs\\docs"

Hugs> ls "."
[".","..","hugs98.chm"]

Hugs> cd ".."
"C:\\WinHugs"

Hugs> cd "C:/WinHugs/docs"
"C:\\WinHugs\\docs"

Hugs> cd ".."
"C:\\WinHugs"

Hugs> cat "readme.txt"
------------------------------------------------------------------------------
__ __ __ __ ____ ___ _________________________________________
|| || || || || || ||__ Hugs 98: Based on the Haskell 98 standard
||___|| ||__|| ||__|| __|| Copyright (c) 1994-2006
||---|| ___|| World Wide Web: http://haskell.org/hugs
|| || Report bugs to: hugs-bugs@haskell.org
|| || Version: May 2006 _________________________________________

------------------------------------------------------------------------------
[PR]
by tnomura9 | 2010-10-14 08:20 | Haskell | Comments(0)
<< IOモナド怖い、まんじゅう怖い。 >>= 演算子と ... >>