我们的代码库中几乎每个模块都有导入,例如:
import qualified Data.Map as Map
import qualified Data.Set as Set
import qualified Data.Text as Text
我想定义一个本地前奏,以便
Map
,Set
和Text
可用于导入该前奏的模块。显然there is no way to do that in Haskell。因此,我想知道人们如何在大型Haskell代码库中解决此问题。 最佳答案
一种解决方案是在CPP header 中定义导入列表。
N.B. :这个答案只是为了显示技术上可行的方法。 Daniel Wagner's answer通常是更好的选择。
对于包级别的示例:
my-pkg/
my-pkg.cabal
include/imports.h
src/MyModule.hs
...
include/imports.h
:import Control.Applicative
import Data.Maybe
import Data.Char
在
my-pkg.cabal
中,组件(library
,executable
,test
,...)具有include-dirs
字段(而该字段又对应于某些GHC选项):library
...
include-dirs: include
然后,您可以在任何模块中使用该 header :
{-# LANGUAGE CPP #-}
module MyModule where
#include "imports.h"
-- your code here
mymaybe = maybe
关于haskell - 什么是合格进口前奏的替代品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49940351/