2017-06-28 2 views
1

Ich entdeckte, dass das Ändern der Reihenfolge oder der Pfade, die an :load übergeben werden, sichtbare Bindungen ändert und es scheint unmöglich zu sein, mehrere Module gleichzeitig zu debuggen. Es ist besonders ärgerlich, da ich Bindungen jedes Mal verliere, wenn ich :load.Ist es möglich, zwei Module als Top-Level in GHCI zu verbinden?

Es scheint, es kann nur ein Modul in *-form wie von der Formulierung von "the most recently successfuly loaded module" vorgeschlagen werden. Trotzdem scheint das Top-Level-Modul einem als erstes Argument zu :load gegeben zu sein.

+1

Mit "\ * - form" meinen Sie das Modul, das der Eingabeaufforderung vorangestellt ist (dh "A" ist die "\ * - Form" in "* A>"), dann können Sie ein solches Modul an beliebiger Stelle hinzufügen nachdem es mit ': m + * A' geladen wurde; Der Teil "Zuletzt geladener Modul" bezieht sich auf den einfachen Vorteil, dass GHCi automatisch das neueste Modul dem Kontext hinzufügt, nachdem Sie ein ': load' ausgeführt haben. Und tatsächlich scheint es, dass das erste Modul zum Laden übergeben wurde, das automatisch zum Kontext hinzugefügt wird, nicht das zuletzt geladene. Ich denke, das ist ein Fehler in der Dokumentation. Unabhängig davon ist es für Ihr Problem nicht relevant. – user2407038

Antwort

3

Wenn ich mich entwickle und zwei oder mehr Module gleichzeitig in GHCi verwenden möchte, habe ich Folgendes getan. Sagen wir, ich Control.Monad und Control.Lens verwenden möchten, und mein eigenes Modul, das ich die Programmierung mit genannt Main:

> :m Control.Lens Control.Monad 

Nun sind beide Control.Lens und Control.Monad in ihrem Umfang sind.

Jetzt scheint es, ich habe vergessen, Main hinzuzufügen, so kann ich problemlos eine + setzen, die Module hinzufügen wird. Das ist so praktisch, dass ich normalerweise immer benutze, ich zeige dir das oben nur, damit du sehen kannst, wie man mehrere Module gleichzeitig importiert.

> :m + Main 

Oder was würde ich normalerweise tun, wie ich gerade beschrieben:

> :m + Main Control.Lens Control.Monad 

Ich denke Main in der Regel standardmäßig enthalten ist, aber Sie erhalten das Bild :)

In Bezug auf neu laden, benutze ich den :r Befehl neu zu laden, und ja, es kann saugen, dass Bindungen verloren sind, aber normalerweise lege ich sie in den Code, in dem ich schreibe, manchmal vorübergehend, oder ich benutze die readline Unterstützung des Betriebssystems durch das historische Backscroll, um vorherige Definitionen zu finden ons.

Happy Haskelling!

Verwandte Themen