Ich habe mich entschieden, meine eigene Prelude
für ein größeres Projekt (mit einigen Bibliotheken und einigen ausführbaren Dateien) zu verwenden. Das Prelude exportiert einige Teilfunktionen nicht und exportiert einige allgemeine Funktionen (d. H. Von Control.Monad
usw.). Ich kämpfe jedoch mit dem Weg, wie es geht. Ich habe versucht:Wie Sie Ihre 'Firma' korrekt definieren Prelude
Verwendung
base-noprelude
. Erstellen SiePrelude.hs
in Modulmy-common-module
.Gleich wie oben, aber in der
my-common-module
erstellenMy.Prelude
stattdessen. In jedem anderen Modul ein Verzeichnis ‚Vorspiel‘ erstellen, es inhs-source-dirs
Kabale Abschnitt setzen, erstellen Sie eine Dateiprelude/Prelude.hs
mitimport My.Prelude
Das Problem ist, dass in 1) Ich kann nicht nur ghci
laufen, wie ich es widersprüchliche bekommen base
und my-common-module
. In 2) ghci
funktioniert, cabal repl
irgendwie nicht, wie es auf mysteriöse Weise mit 'versucht, Modul' Prelude '(Präludium/Prelude.hs) zu verwenden, die nicht geladen ist'. Außerdem scheint base-noprelude
nicht ghcjs
, die ich für einen Teil des Projekts (Code-Sharing) verwenden möchte.
Es scheint mir der einzige Weg ist zur Zeit jede einzelne Datei zu starten mit:
import Prelude()
import My.Prelude
oder
{-# LANGUAGE NoImplicitPrelude #-} -- or extensions: NoImplicitPrelude in .cabal
...
import My.Prelude
Die ‚Erweiterungen: NoImplicitPrelude‘ Option für mich am besten ist, als es erfordert Jede zu importierende Datei My.Prelude
andernfalls wird es nicht funktionieren. Fehle ich eine offensichtliche Möglichkeit, die benutzerdefinierte Prelude erreichen und gleichzeitig mit cabal repl
und ghcjs
arbeiten würde?
Update: Base-Noprelude arbeitet mit GHCJS, wenn ich den Reexport von GHC.Event manuell entferne.
Update: Ok, ich habe etwas Zeit damit verbracht und hätte mehr ausgeben sollen. Es scheint mir, dass 1) der richtige Weg ist. cabal repl
funktioniert (Danke Yuras), Ghci muss mit ghci -hide-package base
geladen werden und funktioniert auch.
Ich glaube nicht, dass es eine Möglichkeit gibt, das zu tun (ich habe mich bemüht). Das Problem mit dem Versuch, das Modul "Prelude" zu verwenden, wird [hier] gemeldet (https://ghc.haskell.org/trac/ghc/ticket/10920). – Yuras
Können Sie ein vollständiges Beispiel von 1) teilen, das funktioniert? Weil es für mich nicht funktioniert :( Und ich bin mir jetzt sicher, wo ich Ihrer geholfen habe :) – Yuras
Ich habe ein separates Kabal-Projekt namens 'base-myprelude' erstellt. Dies definiert einige Dinge und exportiert 'Prelude.hs' (ich musste einige' NoImplicitPrelude' in einigen Submodulen verwenden, da es dazu neigte, sich zu kreisen). Dann habe ich mein eigenes Projekt, "mein Projekt", das in den Kabalen von "base-noprelude, base-myprelude" abhängt. Das Projekt, an dem ich arbeite, ist nicht öffentlich, daher kann ich Sie nicht auf ein Repo hinweisen. Update: 'cabal repl' funktioniert nicht in' base-myprelude', sondern funktioniert in 'my-project', wenn Sie das fragen. – ondra