35

私は Haskell を独学で学び始め、そのために Windows 用の Haskell プラットフォームをインストールしました。今のところ使っWinGHCiています。:cdディレクトリを変更するためのコマンドがあることを知りました。しかし問題は、自分が現在どのディレクトリにいるかをどうやって知ることができるかということです。最初にそれを知らずに、なぜディレクトリを変更したいのでしょうか。私はたくさん検索しましたが、答えを見つけることができませんでした。

現在の作業ディレクトリを知る方法があれば教えてください。できれば、Linux のコンソールのように、現在のディレクトリを表示するようにコマンド プロンプト自体を構成したいと考えています。


@ダニエルの提案に従って、私はこれらを行いました:

  • Windows 7で作業していたのでファイルが無いので.ghci(Unix系OS用だと思います)、こちらの指示通りフォルダにファイルghci.confを作成しました。C:\Users\Apelles\AppData\Roaming\ghc
  • スクリプトをダニエルの回答から にコピーして貼り付けましたghci.conf
  • 次にghci.exe、コンソールのようなウィンドウを開始しました。以前に通常ロードしていたよりも多くのモジュールをロードしていることに気付きました。スナップショットは次のとおりです。

ここに画像の説明を入力

ご覧のとおり、より多くのモジュールが読み込まれ、最後の行には次のように書かれています。

プロンプト文字列を解析できません。Haskell 構文を使用します。

どういう意味ですか?問題を引き起こしているのはどの行ですか (次のスクリプトから)?

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ファイルの名前をランダムな名前に変更してから startghci.exeを実行すると、次のモジュールがロードされます。 ここに画像の説明を入力

前に言ったように、ロードするモジュールの数が少なくなります。つまり、 ghci.confを使用すると、ghci.exe何かが正常に実行されますが、ある時点で失敗します。それを修正する方法は?

4

4 に答える 4

30

System.Directory.getCurrentDirectorydirectoryパッケージから。

于 2014-02-27T16:50:15.750 に答える
4

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

.ghciファイルで。

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

残念ながら、それでは:cd dirディレクトリの変更が反映されません。:doprompt後でマニュアルを作成するか:mycd、ディレクトリを変更するために使用する必要があります。

プロンプトが長すぎるのを避けるためgetCurrentDirectoryに、ファイル パスの最初の部分を削除して結果を操作できます。

この単純なアプローチのもう 1 つの欠点は、読み込まれたモジュールに関する情報がプロンプトに含まれていないことです。私はすべてを克服できると信じていますが、今は掘り起こすほどのモチベーションがありません。

于 2012-06-29T13:55:37.763 に答える