SORU
6 EYLÜL 2012, PERŞEMBE


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
6 EYLÜL 2012, PERŞEMBE


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • adrianisen

    adrianisen

    25 Kasım 2009
  • Skittles Page

    Skittles Pag

    28 Mart 2011
  • stokelycalm

    stokelycalm

    28 Aralık 2010