2014-10-17 13 views
5

Pracuję nad projektem i używam Cabal do zarządzania. Podałem katalog plików źródłowych, modułów, wszystkie rzeczy. Wszystkie moje pliki mają te same nazwy co odpowiadające im moduły, sprawa jest zachowywana.GHCi nie może znaleźć modułów mojego programu

mogę zrobić:

$ cabal configure 
$ cabal build 

bez problemów.

Jednak wyobraź sobie, że mam moduł Module w pliku Module.hs i plik File.hs w tym samym katalogu. Teraz, gdy próbuję załadować File.hs z Emacsa do testowania, pojawia się następujący:

____Could not find module ‘Module’ 
    It is a member of the hidden package ‘ghc-7.8.3’. 
    Use -v to see a list of the files searched for. 
Failed, modules loaded: none. 

Pełna treść File.hs:

module File where 
import Module 

jak zrobić to znaleźć pliki z mojego projektu?

Odpowiedz

4

Musisz powiedzieć GHCi, gdzie znaleźć pliki źródłowe. Na przykład, jeśli katalogiem projekt jest ./foo i masz swoje pliki źródłowe w ./foo/src trzeba powiedzieć (z katalogu projektu):

:set -isrc 

w wierszu poleceń w GHCi. Będziesz wtedy mieć dostęp do prywatnych członków w pliku sourc załadowanym C-c C-l.

Musisz także upewnić się, że nie posiadasz pakietu cabal install, w przeciwnym razie pakiet zostanie załadowany, a nie pliki źródłowe projektu.

+0

Perfect! Działa jak marzenie! – Mark

5

można uruchomić rEPL poprzez Cabal tak:

# Cabal repl

To jest taka sama jak działa ghci, ale weźmie pod uwagę wszelkie dodatkowe zależności zainstalowane przez cabal zainstalować lokalną lub sandbox pakiet magazyn.

+1

Cóż, ładuje tylko wszystko, a nie konkretny plik. Nie mam dostępu do funkcji niepublicznych w module, nad którym pracuję. Lubię robić "C-c C-l" i ładować moduł prądowy do GHCi, jest to całkiem wygodne. Być może istnieje sposób na zapisanie tego przepływu pracy ... Mimo to dziękuję za odpowiedź. – Mark

+1

Po uruchomieniu replikacji można zaimportować pojedynczy plik źródłowy bezpośrednio za pomocą ': load'. tj. ': load MyFile.hs' To da ci bezpośredni dostęp do wewnętrznych/prywatnych członków –