Nasıl hala runhaskell/ile çalışan kütüphane yürütülebilir ile Haskell cabal bir proje ghci yapmak için?
Eğer declare a library executable sections in a cabal file while avoiding double compilation of the library koyarak kütüphaneye hs-source-dirs
dizin edemiyor genellikle çalışma proje ghci
runhaskell
artık, özellikle eğer yürütülebilir dosyalar var yardımcı modüller kendilerini.
Önerilen bir proje bu düzen nedir
- sadece bir kez ihtiyaç duyulan şey oluşturur
- sağlar
runhaskell
kullanarak - kesmek olmadan temiz bir yapıya sahiptir?
CEVAP
Hadi mylib
kütüphane varsayalım, ve mylib-commandline
mylib-server
yürütülebilir.
Her biri kendi proje kök, çift derleme kaçınarak, böylece kütüphane için hs-source-dirs
ve her yürütülebilir kullanın:
mylib/ # Project root
mylib.cabal
src/ # Root for the library
tests/
mylib-commandline/ # Root for the command line utility helper modules
mylib-server/ # Root for the web service helper modules
Tam dizin düzeni:
mylib/ # Project root
mylib.cabal
src/ # Root for the library
Web/
Mylib.hs # Main library module
Mylib/
ModuleA # Mylib.ModuleA
ModuleB # Mylib.ModuleB
tests/
...
mylib-commandline/ # Root for the command line utility
Main.hs # "module Main where" stub with "main = Web.Mylib.Commandline.Main.main"
Web/
Mylib/
Commandline/
Main.hs # CLI entry point
Arguments.hs # Programm command line arguments parser
mylib-server/ # Root for the web service
Server.hs # "module Main where" stub with "main = Web.Mylib.Server.Main.main"
Web/
Mylib/
Server/
Main.hs # Server entry point
Arguments.hs # Server command line arguments parser
saplama gibigiriş noktası mylib-commandline/Main.hs
bu gibi görünüyor dosya:
module Main where
import qualified Web.Mylib.Server.Main as MylibServer
main :: IO ()
main = MylibServer.main
executable
bir modül sadece Main
adlı başlamalı, çünkü onlara ihtiyacımız var.
mylib.cabal
bu gibi görünüyor:
library
hs-source-dirs: src
exposed-modules:
Web.Mylib
Web.Mylib.ModuleA
Web.Mylib.ModuleB
build-depends:
base >= 4 && <= 5
, [other dependencies of the library]
executable mylib-commandline
hs-source-dirs: mylib-commandline
main-is: Main.hs
other-modules:
Web.Mylib.Commandline.Main
Web.Mylib.Commandline.Arguments
build-depends:
base >= 4 && <= 5
, mylib
, [other depencencies for the CLI]
executable mylib-server
hs-source-dirs: mylib-server
main-is: Server.hs
other-modules:
Web.Mylib.Server.Main
build-depends:
base >= 4 && <= 5
, mylib
, warp >= X.X
, [other dependencies for the server]
cabal build
hs-source-dirs
kendi olduğu için kütüphanenin çift derleme olmadan kütüphane ve iki yürütülebilir dosyaları oluşturmak ve yürütülebilir kütüphane bağlıdır.
Hala proje kökünden runghc
ile çalıştırılabilir, modülleri (ayırıcı olarak :
kullanarak) aramak olacaktır nerede söylemek -i
anahtarı kullanarak çalıştırabilirsiniz:
runhaskell -isrc:mylib-commandline mylib-commandline/Main.hs
runhaskell -isrc:mylib-server mylib-server/Server.hs
Bu şekilde, temiz bir düzeni olabilir, yardımcı modülleri ile çalıştırılabilir, ve her şey halarunhaskell
/runghc
ve ghci
ile çalışır. Defalarca bu bayrak yazarak önlemek için, bir şey için benzer ekleyebilirsiniz
:set -isrc:mylib-commandline:mylib-server
.ghci
dosyanıza.
Bazen ayrı paket, örneğin mylib
, mylib-commandline
kodunuzu split ve 35 ** gerektiğini unutmayın.
Nasıl android bir proje için bir Kütüp...
Nasıl bir proje içinde tek bir dosya i...
Nasıl div içeriğini daha büyük değil y...
Nasıl dava Vim / küçük harf duyarlı ar...
Nasıl twitter bootstrap menü hover yer...