www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

gullli

Gepostet:
10.08.2012 11:05

Suchpfad im Compiler setzen  
Hallo allerseits,
ich experimentiere gerade ein bisschen herum und habe nun ein Problem.

gleich zu Beginn meines Programms möchte ich ein Modul aus einem anderen Verzeichnis importieren, z.B. MyModul.hs.

Mein Programm beginnt also mit der Zeile:
import MyModul

Beim Aufruf wird folgende Meldung geworfen:
Could not find module MyModul

D.h. der Compiler kann in seinem Suchpfad das angegebene Modul nicht finden.

Wie kann ich diesen Suchpfad um das Verzeichnis, indem sich das Modul und weitere befinden ergänzen?

Ich verwende den Glasgow Haskell Compiler unter Windows, wenn das eine Hilfe ist...

lg gullli
Zum Seitenanfang    
 
Landei

Gepostet:
10.08.2012 23:13

   
Welche IDE verwendest du? Leksah oder Eclipse FP?
Zum Seitenanfang    
 
gullli

Gepostet:
13.08.2012 10:20

   
keine IDE
Zum Seitenanfang    
 
gullli

Gepostet:
17.08.2012 13:23

   
angenommen ich würde leksah verwenden (womit ich mich schwer tue, weil es sehr kompliziert ist)
wie könnte ich denn da den suchpfad setzen?
Zum Seitenanfang    
 
Siracusa

Gepostet:
17.08.2012 18:50

   
Wie der Suchpfad erweitert werden kann, wird in der GHC-Dokumentation beschrieben: http://www.haskell.org/ghc/docs/7.2.1/html/users_guide/separate-compilation.html#search-path

Es ist aber nicht zu empfehlen, Dateien aus verschiedenen Basisverzeichnissen durcheinanderzuwürfeln. Der übliche Weg ist, ein Basisverzeichnis zu haben, das wiederum verschiedene Unterverzeichnisse besitzt. Jedes Unterverzeichnis entspricht dabei einer Hierarchieebene bei den Modulnamen. Und nur innerhalb dieses Basisverzeichnisses befinden sich dann alle Projektdateien.

Ein Beispiel zur Veranschaulichung: Angenommen dein Projekt liegt in einem Verzeichnis project und du möchtest die folgenden Module verwenden:
Main
Logic.Core
Logic.Tools
GUI.MainWindow
GUI.Dialogs

dann müsste dein Basisverzeichnis wie folgt aussehen:
project
+- Main.hs
+- Logic
| +- Core.hs
| +- Tools.hs
+- GUI
+- MainWindow.hs
+- Dialogs.hs

Ideen für sinnvolle Hierarchien kannst du dir aus der Standardbibliothek holen: http://www.haskell.org/ghc/docs/7.2.1/html/libraries/index.html

Viele Grüße
Siracusa
Zum Seitenanfang    
 
gullli

Gepostet:
23.08.2012 11:27

   
Das mit dem Hauptverzeichnis habe ich ausprobiert.
Ich hatte ein Verzeichnis ...\\Test
In diesem liegt meine test.hs Datei
Die test.hs Datei ruft mittels import Anweisung das MyModul.hs aus dem Verzeichnis ...\\Test\\mytest auf
folgendes habe ich also in der test.hs datei geschrieben:

import mytest.MyModul
...

wenn ich das Programm laufen lasse
auf GHCi, meldet der Compiler:
parse error on input `mytest\'
Failed, modules loaded: none.


auf Hugs, wird gemeldet:
Error file:.\\test.hs:1 - Syntax error in import declaration (unexpected symbol \"mytest\")

schreibe ich stattdessen in meiner test-Datei:

import MyModul
...

kann das Modul nicht gefunden werden.

ich habe versucht dem Compiler mit der \"-i\" Anweisung

-ic:\\...\\test\\mytest

mitzuteilen, dass da noch ein Verzeichnis bei der Suche berücksichtigt werden soll
GHCi meldet den Fehler:
<interactive>:0:11: parse error on input `\\\'

ich habe also versucht den \'\\\' durch ein \'/\' zu ersetzen.
dann kommt die Fehlermeldung:
<interactive>:0:2:
Not in scope: `ic\'
Perhaps you meant `id\' (imported from Prelude)
<interactive>:0:4: Not in scope: data constructor `:/\'
...


Als würde der Compiler den Befehl nicht kennen Smilie

Ich weiß nicht ob es ein windows-spezifisches Problem ist, oder ich den Befehl falsch angegeben habe, oder ob der GHC einen Fehler aufweist...

lg gulli
Zum Seitenanfang    
 
Siracusa

Gepostet:
23.08.2012 18:21

   
Zunächst einmal, alle Modul- und Verzeichnisnamen müssen mit einem Großbuchstaben beginnen. Außerdem sollte jeder Modulname genau seinem Dateinnamen entsprechen. Also wenn dein Modul \"Test\" heißt, dann sollte der Dateiname auch \"Test.hs\" sein (in genau dieser Scheibung); wenn du dein Modul als \"MyTest.Test\" importierst, heißt die zugehörige Datei \"Test.hs\" im Verzeichnis \"MyTest\".

Des weiteren wird der Suchpfad beim Start des GHCi angegeben, also \"ghci -i...\". Wenn du während einer GHCi-Sitzung das Basisverzeichnis wechseln möchtest, kannst du das Kommando \":cd ...\" verwenden.

Viele Grüße
Siracusa
Zum Seitenanfang    
 
gullli

Gepostet:
24.08.2012 10:23

DANKE  
Vielen Dank Siracusa,

Es geht, es geht Smilie
!!!Danke, Danke, Danke!!!
Danke für die ausführliche Beschreibung. Viel Besser als der User-Guide des GHC.

Liebe Grüße
gullli
Zum Seitenanfang