web-dev-qa-db-ja.com

WinGHCiで現在の作業ディレクトリを確認する方法

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

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


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

  • 私はWindows7で作業していたので、.ghciファイルがないので(UnixライクなOS用だと思います)、ghci.confフォルダーにC:\Users\Apelles\AppData\Roaming\ghcファイルを作成しました ここで説明されています
  • ダニエルの回答からghci.confにスクリプトをコピーして貼り付けました。
  • 次に、コンソールのようなウィンドウであるghci.exeを起動しました。以前にロードしていたものよりも数少ないモジュールをロードしていることに気づきました。スナップショットは次のとおりです。

enter image description here

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

プロンプト文字列を解析できません。 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ファイルの名前をランダムな名前に変更してから、ghci.exeを起動すると、次のモジュールがロードされます。 enter image description here

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

31
Nawaz

System.Directory.getCurrentDirectory

28
jp093121

これが「正しい」方法かどうかはわかりませんが、:!はシェルコマンドを許可しますが、ディレクトリまたはコンテンツを読み取るための適切なシェルコマンド(OSの)を使用して取得することもできます(つまり、cdlsなど)。たとえば、次のように書くことができます。

:! cd

それはあなたが何のためにディレクトリを必要とするかによります。コンソールで印刷したいだけの場合は、これが役立ちます。

ではごきげんよう!

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ファイル内。

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

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

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

この単純なアプローチのもう1つの欠点は、プロンプトにロードされたモジュールに関する情報が含まれなくなったことです。私はそれをすべて克服できると信じていますが、私は今掘り下げるのに十分な動機がありません。

3
Daniel Fischer

Ghciコマンドプロンプトタイプ:! cdで、現在のディレクトリの出力が表示されます。一般に、:!の後にシェルコマンドを使用して、ghciコマンドプロンプトでシェルコマンドを実行します。シェルはWindowsとMac/Linuxで異なるため、使用できるコマンドは異なります。

1