2012-06-28 18 views
21

私はハスケル自身を教え始めました。そのためには、Windows用にThe Haskell Platformをインストールしました。私は今のところWinGHCiを使用しています。ディレクトリを変更するためのコマンド:cdがあることを知りました。しかし、問題は、私が現在どのディレクトリにいるのか、どのように分かっているのでしょうか?なぜ私はディレクトリを変更したいのですか?私は多くを検索しましたが、答えを見つけることができませんでした。WinGHCiの現在の作業ディレクトリを確認する方法

現在の作業ディレクトリを知る方法があるかどうか教えてください。私は、現在のディレクトリを表示するようにコマンドプロンプト自体を設定したいと思っています。これは、Linuxのコンソールによく似ています。

ダニエルの提案@続き

、私はこれらをした:

  • 私は、Windows 7上で働いていたので、そこには.ghciファイルは(私はそれがUnixライクなOSのためだと思う)ではありませんので、私が作成しましたファイルghci.confC:\Users\Apelles\AppData\Roaming\ghcフォルダに、it is instructed hereとしてください。
  • ダニエルの答えのスクリプトをghci.confに貼り付けてコピーします。
  • その後、コンソールのようなウィンドウであるghci.exeを開始しました。私はそれが前に読み込むために通常使用したモジュールよりも少数のモジュールをロードしていることに気づいた。

enter image description here

あなたはそれがより多くのモジュールをロードします見ることができ、そして最後の行が言うように、

は、プロンプト文字列を解析できません:ここではスナップショットです。 Haskell構文を使用します。

この意味は?どの行が問題を引き起こしているか(次のスクリプトから) enter image description here

私が前に言ったように、それはを意味し、モジュールのより少ない数を、ロードします。私はいくつかのランダムな名前にghci.confファイルの名前を変更し、その後ghci.exeを開始する場合も

let cur fill = do { cwd <- System.Directory.getCurrentDirectory; return (":set prompt \"" ++ cwd ++ fill ++ " \""); } 
:def doprompt (\_ -> cur ">") 
:def mycd (\dir -> System.Directory.setCurrentDirectory dir >> cur ">") 
:doprompt 

が、それはこれらのモジュールをロードしますghci.confの場合はghci.exeが成功しますが、ある時点で失敗します。それを修正するには?

+8

> 'プレリュードをお試しください! pwd'(またはWindowsのpwdに相当するもの)を指定します。 WinGHCiは普通のghciを実行していると思うので、うまくいくはずです。 –

+0

@ダニエルフィッシャー:それは素晴らしい作品です。コマンドプロンプト自体を設定することは可能でしょうか? – Nawaz

+0

はい、プロンプトに ':set prompt Whatever'(ghciコマンドの簡単なヘルプは':? ')と設定できます。しかしそれはセッションごとです。永続的なものにするには、あなたの '.ghci'ファイルで行います(私は彼らがWindows上で異なって呼び出されていると思いますが、何を覚えていないのでしょうか)。私はどのように現在のディレクトリにそれを設定するか分からない。 –

答えて

3

現在の作業ディレクトリにGHCiのプロンプトを設定するには貧乏人のソリューションは、.ghciファイルに

let cur fill = do { cwd <- System.Directory.getCurrentDirectory; return (":set prompt \"" ++ cwd ++ fill ++ " \""); } 
:def doprompt (\_ -> cur ">") 
:def mycd (\dir -> System.Directory.setCurrentDirectory dir >> cur ">") 
:doprompt 

を置くことになります。

最初の行では、現在のディレクトリを取得するcur :: String -> IO Stringを定義し、それに応じてプロンプトを設定するghciコマンドを返します。次に、そのアクションを実行するghciコマンドdopromptと、ディレクトリを変更してプロンプトを設定するコマンドを定義します。最後の行は起動時に:dopromptを実行します。

残念ながら、:cd dirにはディレクトリの変更が反映されません。後で手動で:dopromptを実行するか、:mycdを使用してディレクトリを変更する必要があります。あまりにも長い間、プロンプトを回避するために

、一つはファイルパスの最初の部分をドロップすることによってgetCurrentDirectoryの結果を操作することができます。

そのシンプルなアプローチの別の欠点は、プロンプトはもうロードモジュールに関する情報が含まれていないということです。私はそれをすべて克服することができると信じていますが、今私は掘り出し物をするのに十分な動機はありません。

+0

私はこれを試してみましょう。当分の間、答えようとすると+1。 – Nawaz

+0

Windowsで試したところ、うまく動作しませんでした。私がしたことを私の質問に加えました。それを見てください。 – Nawaz

+0

それを聞いて申し訳ありません。何が失敗したのか? (私はあなたの質問にまだ編集を参照してください) –

21

System.Directory.getCurrentDirectory

関連する問題