Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 如何在Cabal包中构建和使用引导可执行文件_Haskell_Cabal - Fatal编程技术网

Haskell 如何在Cabal包中构建和使用引导可执行文件

Haskell 如何在Cabal包中构建和使用引导可执行文件,haskell,cabal,Haskell,Cabal,我想把一个Haskell项目归档,以便上传到Hackage。它由一个标准的.hs文件(用于构建引导可执行文件)和八个非标准的.lhs文件(由引导可执行文件处理以生成生成生产可执行文件的.hs文件)组成 换句话说,我的项目是一个自定义的预处理器(带有HTML标记、代码整理,这里是文档),它是自己编写的。它依赖于一个引导版本,该版本可以将可读代码转换为生产版本,但不适合一般使用。所以我不希望引导版本是一个单独的包;在这里只能使用一次 我一直在使用Makefile,这在阴谋集团中是可能的,但不符合阴谋

我想把一个Haskell项目归档,以便上传到Hackage。它由一个标准的.hs文件(用于构建引导可执行文件)和八个非标准的.lhs文件(由引导可执行文件处理以生成生成生产可执行文件的.hs文件)组成

换句话说,我的项目是一个自定义的预处理器(带有HTML标记、代码整理,这里是文档),它是自己编写的。它依赖于一个引导版本,该版本可以将可读代码转换为生产版本,但不适合一般使用。所以我不希望引导版本是一个单独的包;在这里只能使用一次


我一直在使用Makefile,这在阴谋集团中是可能的,但不符合阴谋集团的精神。什么是一个干净的方式来做到这一点,最大限度地利用阴谋集团的普遍性?我在在线文档中没有看到任何关于这方面的建议,除了重写发行版.Simple或使用Makefile之外。

我认为将引导程序可执行文件作为单独的包发布是最简单的解决方案,而且还有很多

如果不想这样做,请尝试将预处理器设置为
Setup.hs
的一部分(不要忘记将生成类型设置为
自定义
!)。您可以在配置步骤中运行预处理器。看看这是怎么回事

下面是一个工作示例(仿照
wxcore
):

Setup.hs

import Distribution.Simple
import Distribution.Simple.LocalBuildInfo
import Distribution.Simple.Setup
import Distribution.PackageDescription

import Control.Monad (forM_)
import System.Directory (copyFile)
import System.FilePath (replaceExtension)

main :: IO ()
main = defaultMainWithHooks simpleUserHooks { confHook = myConfHook }

-- Replace 'copyFile' with more complicated logic.
runMyPreprocessor :: FilePath -> IO ()
runMyPreprocessor abcFile = copyFile abcFile (replaceExtension abcFile ".hs")

myConfHook :: (GenericPackageDescription, HookedBuildInfo) -> ConfigFlags
              -> IO LocalBuildInfo
myConfHook (pkgDesc, hbi) flags = do
  let extraSrc = extraSrcFiles . packageDescription $ pkgDesc
  forM_ extraSrc runMyPreprocessor

  confHook simpleUserHooks (pkgDesc, hbi) flags
我的预处理器.阴谋集团

name:                my-preprocessor
version:             0.1.0.0
build-type:          Custom
cabal-version:       >=1.8
extra-source-files:  Main.abc

executable my-preprocessor
  main-is: Main.hs
  build-depends:       base < 5

美好的我现在正在试验这个。我的引导预处理器代码很短;一个选项是我只需将其包含在Setup.hs!
module Main
       where

main :: IO ()
main = putStrLn "Hello"