Ho deciso di utilizzare il mio Prelude
per un progetto più grande (contenente alcune librerie e alcuni file eseguibili). Il preludio non esporta alcune funzioni parziali ed esporta alcune funzioni comuni (ad esempio da Control.Monad
ecc.). Tuttavia, sto combattendo con il modo in cui farlo. Ho provato:Come definire correttamente il tuo Preludio "azienda"
utilizzare
base-noprelude
. CrearePrelude.hs
nel modulomy-common-module
.Come sopra, ma nello
my-common-module
creareMy.Prelude
invece. In ogni altro modulo creare una directory 'preludio', metterlo inhs-source-dirs
sezione cabala, creare un fileprelude/Prelude.hs
conimport My.Prelude
Il problema è che in 1) non posso correre ghci
, mentre ottengo in conflitto base
e my-common-module
. In 2) ghci
funziona, cabal repl
in qualche modo non come fallisce misteriosamente con 'tentativo di usare il modulo' Prelude '(preludio/Prelude.hs) che non è caricato'. Inoltre, non sembra chepiaccia lo ghcjs
, che voglio utilizzare per parte del progetto (condivisione del codice).
Mi sembra l'unico modo attualmente è quello di iniziare ogni singolo file con:
import Prelude()
import My.Prelude
o
{-# LANGUAGE NoImplicitPrelude #-} -- or extensions: NoImplicitPrelude in .cabal
...
import My.Prelude
Le 'estensioni: NoImplicitPrelude' opzione mi sembra meglio in quanto richiede ogni file da importare My.Prelude
altrimenti non funzionerà. Mi manca un modo ovvio per ottenere Preludio personalizzato e allo stesso tempo lavorare con cabal repl
e ghcjs
?
Aggiornamento: base-noprelude funziona con GHCJS quando rimuovo manualmente il reexport di GHC.Event.
Aggiornamento: Ok, ho passato un po 'di tempo con questo e avrei dovuto spendere di più. Mi sembra che 1) sia la strada giusta da percorrere. cabal repl
funziona (grazie Yuras), ghci deve essere caricato con ghci -hide-package base
e funziona anche.
Non credo che ci sia un modo per farlo (ci ho provato sodo). Il problema con 'tentativo di usare il modulo 'Preludio'' è riportato [qui] (https://ghc.haskell.org/trac/ghc/ticket/10920). – Yuras
Potresti condividere un esempio completo di 1) che funziona? Perché non funziona per me :( E ora sono sicuro di dove ho aiutato il tuo :) – Yuras
Ho creato un progetto di cabala separato chiamato base-myprelude'. Questo definisce alcune cose ed esporta 'Prelude.hs' (dovevo usare alcuni' NoImplicitPrelude' in alcuni sottomoduli in quanto tendeva a circolare). Poi ho il mio progetto, 'mio-progetto' che nella cabala dipende da 'base-noprelude, base-miaprelude'. Il progetto a cui sto lavorando non è pubblico, quindi non posso indicarti un repo. Aggiornamento: 'cabal repl' non funziona in' base-myprelude', ma funziona in 'my-project', se è quello che stai chiedendo. – ondra