Zdecydowałem się użyć własnego Prelude
dla większego projektu (zawierającego niektóre biblioteki i niektóre pliki wykonywalne). Preludium nie eksportuje niektórych funkcji częściowych i eksportuje niektóre wspólne funkcje (tj. Od Control.Monad
itd.). Jednak walczę z tym, jak to zrobić. Próbowałem:Jak poprawnie zdefiniować preludium "firmy"
użyć
base-noprelude
. UtwórzPrelude.hs
w modulemy-common-module
.Tak samo jak powyżej, ale zamiast tego w
my-common-module
utworzonoMy.Prelude
. W każdym innym modułem utworzyć katalogu „Preludium”, umieścić go whs-source-dirs
cabal sekcji, należy utworzyć plikprelude/Prelude.hs
zimport My.Prelude
Problem polega na tym, że w 1) Nie mogę uruchomić ghci
, jak otrzymuję sprzeczne base
i my-common-module
. W 2) ghci
działa, cabal repl
w jakiś sposób nie zawodzi w tajemniczy sposób "próbując użyć modułu" Prelude "(prelude/Prelude.hs), który nie jest załadowany". Dodatkowo, base-noprelude
nie wydaje się lubić ghcjs
, który chcę użyć dla części projektu (dzielenie kodu).
Wydaje mi się, że jedynym sposobem jest obecnie na rozpoczęcie każdego i każdy plik z:
import Prelude()
import My.Prelude
lub
{-# LANGUAGE NoImplicitPrelude #-} -- or extensions: NoImplicitPrelude in .cabal
...
import My.Prelude
do „rozszerzenia: NoImplicitPrelude” opcja wydaje mi się najlepiej, gdyż wymaga każdy plik do importowania My.Prelude
inaczej nie będzie działać. Czy brakuje mi jakiegoś oczywistego sposobu osiągnięcia Preludium niestandardowego, a jednocześnie pracy z cabal repl
i ghcjs
?
Aktualizacja: base-noprelude działa z GHCJS, gdy ręcznie usuwam reexport z GHC.Event.
Aktualizacja: Ok, spędziłem z tym trochę czasu i powinienem był wydać więcej. Wydaje mi się, że 1) jest właściwą drogą. cabal repl
działa (dzięki Yuras), ghci musi być załadowany z ghci -hide-package base
i działa też.
Nie sądzę, że istnieje sposób, aby to zrobić (próbowałem mocno). Problem z 'próbą użycia modułu 'Prelude'' jest zgłaszany [tutaj] (https://ghc.haskell.org/trac/ghc/ticket/10920). – Yuras
Czy możesz udostępnić pełny przykład 1), który działa? Ponieważ to nie działa dla mnie :( I jestem teraz pewien, gdzie pomogłem twojemu :) – Yuras
Stworzyłem oddzielny projekt kabalowy o nazwie 'base-myprelude'. To definiuje pewne rzeczy i wyeksportuje 'Prelude.hs' (musiałem użyć jakiegoś' NoImplicitPrelude' w niektórych submodułach, które zwykle krążyły). Potem mam swój własny projekt, "mój-projekt", który w cabal zależy od 'base-noprelude, base-myprelude'. Projekt, nad którym pracuję, nie jest publiczny, więc nie mogę wskazać ci repozytorium. Aktualizacja: 'cabal repl' nie działa w' base-myprelude', ale działa w 'my-project', jeśli o to pytasz. – ondra