我们的代码库中几乎每个模块都有导入,例如:

import qualified Data.Map as Map
import qualified Data.Set as Set
import qualified Data.Text as Text

我想定义一个本地前奏,以便MapSetText可用于导入该前奏的模块。显然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中,组件(libraryexecutabletest,...)具有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/

10-11 22:32
查看更多