35

別のディレクトリにモジュールをインポートするためのHaskellの構文は何ですか?

Haskell を使い始めたばかりで、HUnit を使用して TDD スタイルの単純な関数を書く練習をしたいと思っています。ただし、ファイルの構造を理解するのに苦労しています。HUnit に付属する例は、フラットなディレクトリ構造のようです。

テストと HUnit コードを実際のコードとは別のフォルダーに配置したいと考えています。import ステートメントの簡単な例と、ファイルをどのように構成するかについての提案をいただければ幸いです。

それが問題であれば、私は今、GHCi と NotePad++ を使用してコーディングを行っています。

4

2 に答える 2

32

Haskellのソースコードから実際にそれを行うのではありません。代わりに、コンパイラにどこを見ればよいかを指示します。通常の方法は.cabalファイルにあります。詳細については、cabalユーザーガイドを参照してください。「hs-source-dirs」パラメーターが必要です。

または、パスをコンパイラに直接渡すこともできます。ただし、Cabalの方が適しています。

「hs-source-dirs」パラメーターの各パス名は、モジュール階層のルートを指定します。基本的に、「Data.Foo.Bar」というモジュールをインポートすると、コンパイラは「hs-source-dirs」で指定された各ディレクトリで相対パス名「Data / Foo / Bar.hs」のファイルを探し、最初のファイルをインポートします。それが見つけたもの。

于 2011-02-17T21:43:45.003 に答える
20

ポールの答えrunhaskellは的を射ていますが、主にまたはを使用してスクリプトを実行するための迅速かつ簡単なソリューションのために、パスをコンパイラに直接渡すというアイデアを拡張したかっただけrunghcです。

必要な作業は-i、コロンで区切られたディレクトリのリストを使用してフラグをコンパイラに渡すことだけです。コンパイラは、インポートされたモジュールのソース ファイルのディレクトリをチェックします。

たとえば、次のようなディレクトリ構造があるとします。

home/
|-- user/
    |-- haskell/
        |-- Module1.hs
        |-- foo/
            |-- Module2.hs

そして、インポートできるようModule2にしたい場合は、通常どおりインポートステートメントをModule1内部Module2.hsに追加します。

import Module1

次に、Module2.hsusingを実行runhaskellすると、次のように実行されます。

$ cd /home/user/haskell/foo
$ runhaskell -i/home/user/haskell Module2.hs

参照:

于 2012-11-28T15:44:03.383 に答える