2014-03-05 7 views
11

Ich schrieb einige einfache Module in Haskell und dann import es in anderen Datei. Dann versuche ich, Funktionen mit Datenkonstruktoren von meinem Modul zu verwenden - es gibt einen Fehler Not in scope: data constructor: <value>. Wie kann ich es reparieren?Haskell Fehler Nicht im Bereich: Datenkonstruktor

Hinweis: Wenn ich es nach dem Import im Interpreter benutze - alles ist gut ohne Fehler.

Mein Modul Test.hs:

module Test (test_f) where 
data Test_Data = T|U|F deriving (Show, Eq) 

test_f x 
    | x == T = T 
    | otherwise = F 

Und meine Datei file.hs:

import Test 

some_func = test_f 

kein Fehler, wenn ich in Interpreter ich schreibe:

> :l Test 
> test_f T 
T 

In Dolmetscher Ich versuche, um some_func T auszuführen, aber ein Fehler ist aufgetreten. Und wie kann ich die Klasse Test_Data in meiner Datei verwenden, um Anmerkungen zu beschreiben?

Antwort

12

Sie exportieren es nicht von Ihrem Modul:

module Test (test_f, Test_Data(..)) where 

Der (..) Teil sagt: „alle Konstrukteure für TestData exportieren“.

11

Sie haben eine explizite Exportliste in Ihrem Modul Test:

module Test (test_f) where 

der Exportliste (test_f) besagt, dass Sie die Funktion test_f und nichts anderes exportieren möchten. Insbesondere sind der Datentyp Test_Data und seine Konstruktoren ausgeblendet.

Um dies zu beheben, entweder die Exportliste wie folgt entfernen:

module Test where 

Jetzt wird alles exportiert werden.

oder den Datentyp und seine Konstrukteure auf der Exportliste wie folgt hinzu:

module Test (test_f, Test_Data(..)) where 

Die Notation Test_Data(..) exportiert einen Datentyp mit allen entsprechenden Konstrukteure.

Verwandte Themen