2017-10-24 1 views
1

Ich habe drei Dateien. Die erste:Wie verwende ich einen Datentyp in einem Haskell-Paket

module AST where 

data Prog a b = ... 

Der zweite

module ParseProg where 

import qualified AST as A 

progToAST :: String -> A.Prog String String 

Dieser Teil eines Pakets für eine Hausaufgabe verwendet wird. Ich installierte es mit

$ cabal configure 
$ cabal build 
$ cabal install 

, die zu funktionieren schienen. Mein drittes Programm (Testen) ist

import ParseProg 

val1 = progToAST "x" 

-- prog :: A.Prog String String 

fun1 :: Int -> Int 
fun1 x = 2 

-- val2 = fun1 val1 

So funktioniert der Import. Wenn ich prog obwohl Kommentar-, erhalte ich

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

Das Gleiche gilt, wenn ich versuche, Prog oder AST.Prog. die Art der val1 nachsieht

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

Und ähnlich Auskommentierung val2

Couldn't match expected type ‘Int’ 
      with actual type ‘CabParser-0.1.0.0:AST.Prog String String’ 

Kopieren CabParser-0.1 gibt .... ein Parse-Fehler gibt. Wie verwende ich den Prog-Datentyp in AST?

+1

Sie haben in Ihrem dritten Programm nicht "importierten qualifizierten AST als A". – Ryan

+0

Jetzt bekomme ich '" Konnte das Modul 'AST' nicht finden es ist ein verstecktes Modul im Paket'[email protected]_ ' – fhyve

+1

Sie müssen es in Ihrer' .cabal' Datei für 'CabParser auflisten '. Ich erinnere mich nicht an den Feldnamen, aber' ParseProg 'wird darin bereits aufgeführt. – Ryan

Antwort

4

Ryan löste dies in den Kommentaren. Ich schreibe hier die Lösung.

Das erste Problem ist ich nicht die AST in der dritten Datei importiert wurden, so wird es:

import ParseProg 
import AST as A 

Dies ist jedoch ein Fehler

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

Aus irgendeinem Grund gibt, AST ist ein verstecktes Modul im Paket CabParser, das ich benutze, also muss ich es ein exponiertes Modul machen. In CabParser.cabal im Verzeichnis des Pakets, füge ich AST auf die freiliegenden Module:

exposed-modules:  ParseProg, AST 

und entfernen Sie sich von der anderen-Module Linie. Dann baue und installiere ich wieder mit

$ cabal configure 
$ cabal build 
$ cabal install 

Dann funktioniert alles.

Verwandte Themen