2017-10-24 12 views
1

私は3つのファイルを持っています。最初:haskellパッケージでデータ型を使用する方法

module AST where 

data Prog a b = ... 

module ParseProg where 

import qualified AST as A 

progToAST :: String -> A.Prog String String 

これは宿題のために使用されるパッケージの一部です。

$ cabal configure 
$ cabal build 
$ cabal install 

と一緒にインストールしました。私の3番目のプログラム(テスト)は

import ParseProg 

val1 = progToAST "x" 

-- prog :: A.Prog String String 

fun1 :: Int -> Int 
fun1 x = 2 

-- val2 = fun1 val1 

です。私もPROGのコメントを解除した場合、私はプログレやAST.Progをしようとした場合、私は

Not in scope: type constructor or class ‘A.Prog’ 

同じものを取得します。 VAL1のタイプは

> :type val1 
> val1 :: CabParser-0.1.0.0:AST.Prog String String 

を取得し、同様にコメントを解除VAL2が

CabParser-0.1のコピー
Couldn't match expected type ‘Int’ 
      with actual type ‘CabParser-0.1.0.0:AST.Prog String String’ 

を与えるチェック....解析エラーを与えます。 ASTでProgデータ型を使用するにはどうすればよいですか?

+1

3つ目のプログラムでは、 'AとしてASTをインポートできません。 – Ryan

+0

今度は '' AST 'モジュールを見つけられませんでした パッケージの隠しモジュールです'[email protected]_ ' – fhyve

+1

あなたの '.cabal'ファイルに' CabParser '。フィールド名は覚えていませんが、既に' ParseProg'がリストアップされています。 – Ryan

答えて

4

Ryanはコメントにこれを解決しました。私はここに解決策を書いています。

最初の問題は、私は3番目のファイルにASTをインポートしていなかったので、それは次のようになります。

import ParseProg 
import AST as A 

はしかし、これはいくつかの理由でエラー

"Could not find module ‘AST’ it is a hidden module in the package ‘[email protected]_<nonsense>" 

を与えますが、ASTがあります私が使用しているパッケージCabParserの非表示のモジュールです。そのため、公開モジュールにする必要があります。

exposed-modules:  ParseProg, AST 

およびその他の-モジュールラインからそれを削除します。CabParser.cabalでは、パッケージのディレクトリに、私が露出モジュールにASTを追加します。その後、私は再びビルドしてインストールします

すべてが動作します。

関連する問題