Wie verwende ich "cabal-dev ghci" mit einem nicht-globalen, nicht-globalen Paket (Benutzer?)?

8

Ich probiere cabal-dev für ein Projekt aus, an dem ich gerade arbeite; Das Projekt ist eine Bibliothek, und cabal-dev leistet großartige Arbeit, um eine Sandbox-Version davon zu erstellen - aber ich habe Probleme mit einem Teil meines Workflows ...

Ich habe ein Skript, scratch.hs , welches (% pre_co_de%) ich in cabal-dev laden würde, um Dinge auszuprobieren. Der Inhalt von ghci ändert sich im Laufe der Zeit, abhängig davon, an welchem ​​Feature ich gerade arbeite. scratch.hs ist nicht Teil der Bibliotheks-Codebase, es ist nur mein persönlicher Scratchspace, während ich daran arbeite.

Um nun eine scratch.hs -Session mit meiner Sandbox zu laden, kann ich einfach ghci und dann cabal-dev ghci in diese laden. Das Problem ist, dass dies meine Design-Paket-Datenbank ausschließt, wenn scratch.hs Module von Paketen referenziert, die nicht in der scratch.hs meiner Bibliothek sind (was nicht unangemessen ist - es ist nicht Teil der Bibliothek danach all), diese Pakete sind nicht sichtbar, und so bekomme ich einen Fehler wie:

%Vor%

In diesem Fall möchte build-depends scratch.hs importieren, aber Data.Aeson.Generic befindet sich nicht in der aeson meiner Bibliothek (ganz richtig), aber ist in meiner Benutzerpaket-Datenbank.

Wie kann ich das umgehen? Ich kann mir Antworten in jeder dieser Kategorien vorstellen, aber vielleicht gibt es Kategorien, die ich vermisst habe:

  1. Eine Möglichkeit, (selektiv) Pakete aus meiner Benutzerpaketdatenbank zusammen mit der von build-depends erstellten Sandbox zu verwenden. (Vielleicht mein eigenes Skript cabal-dev style?)

  2. Ein Vorschlag, wie ich meinen Workflow verbessern kann, damit das Problem einfach verschwindet.

Ich weiß, ich könnte das Paket nur global installieren, aber ich möchte meine globale Paketdatenbank nicht auf diese Weise verschmutzen (und cabal-dev ghci rät dies ausdrücklich ab).

Vielen Dank für den ganzen Rat.

    
gimboland 15.09.2011, 14:08
quelle

1 Antwort

8

Ich denke, die einfachste Lösung besteht darin, die Dinge, die Sie brauchen, in die Sandbox zu installieren. Zum Beispiel, wenn Sie Aeson für Ihr interaktives Skript benötigen:

%Vor%

Dann sollte :set -package aeson in ghci funktionieren.

Wenn das nicht ausreicht, haben Sie viele Abhängigkeiten, die Sie aus Ihrer Benutzerpaket-Datenbank verwenden möchten, und Sie müssen ghci nicht mit den anderen Flags aufrufen, die Ihre cabal-Datei zum Aufrufen von ghc festlegt. Dann können Sie nicht-sandboxed ghci mit Zugriff auf die Pakete aus der Sandbox sowie Ihren Benutzer- und globalen Paketen aufrufen. Zum Beispiel (für GHC 7.0.3):

%Vor%

(Beachten Sie sowohl den Doppelpunkt am Ende von GHC_PACKAGE_PATH als auch das Leerzeichen zwischen diesem und ghci .)

    
j3h 19.09.2011, 16:23
quelle