2012-11-20 9 views
13

ich zwei .hs Dateien haben: eine neue Art enthalten Verzögerung, und der andere nutzt esnicht im Konstruktor Umfang Daten

first.hs:

module first() where 
    type S = SetType 
    data SetType = S[Integer] 

second.hs:

module second() where 
    import first 

Wenn ich second.hs ausführen, beide Module erste, zweite sind nur gut geladen Aber wenn ich :type S auf Haskell-Plattform schreiben, erscheint der folgende Fehler

Not in scope : data constructor 'S' 

Hinweis: Es gibt in jedem Modul einige Funktionen sicher, ich bin das Überspringen es nur für die Frage Klarheit

Antwort

17
module first() where 

in Wirklichkeit Unter der Annahme der Modulname mit einem Großbuchstaben beginnt , wie es sein muss, die leere Exportliste - () - sagt das Modul exportiert nichts, so dass die Dinge, die in First definiert sind, sind nicht im Umfang in Second.

vollständig die Exportliste weglassen alle Top-Level-Bindungen zu exportieren, oder Liste die exportierten Einheiten in der Exportliste

module First (S, SetType(..)) where 

(die (..) Exporte auch die Konstrukteure von SetType, ohne dass nur der Typ würde exportiert werden).

und Verwendung als

module Second where 

import First 

foo :: SetType 
foo = S [1 .. 10] 

Sie auch die oberste Ebene einrücken kann,

module Second where 

    import First 

    foo :: SetType 
    foo = S [1 .. 10] 

aber das ist hässlich, und man kann sich leicht Fehler aufgrund falsch gezählt den Einzug erhalten.

+0

ja, es Sterne mit Großbuchstaben (i nur vergessen, es zu schreiben hier, dass die Art und Weise) wo den Import Linie dann schreiben? – Shimaa

+0

Ja, hätte sonst nicht kompiliert. –

+0

Wo soll der Import geschrieben werden? Erste Zeile, so dass ihre Datentypen im Bereich von Second liegen? – Shimaa

2
  • Modulnamen beginnen mit einem Kapital - Haskell ist Groß- und Kleinschreibung
  • Richten Sie Ihren Code am linken Rande - das Layout ist in Haskell wichtig.
  • Das Bit in Klammern ist die Exportliste - verpassen Sie es, wenn Sie alle Funktionen exportieren möchten, oder legen Sie alles, was Sie exportieren möchten.

First.hs:

module First where 

type S = SetType 
data SetType = S[Integer] 

Second.hs:

module Second where 
import First