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:
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:
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?)
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.
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):
(Beachten Sie sowohl den Doppelpunkt am Ende von GHC_PACKAGE_PATH
als auch das Leerzeichen zwischen diesem und ghci
.)
Tags und Links haskell cabal libraries cabal-install ghci