gat*_*ado 12 import haskell module
我经常养成使用标准导入块的习惯,因此在需要时我手头有常用的功能.例如,
-- license block
{-# LANGUAGE Arrows,
DeriveDataTypeable,
EmptyDataDecls,
FlexibleContexts,
FlexibleInstances,
FunctionalDependencies,
GADTs,
MultiParamTypeClasses,
NoMonomorphismRestriction,
RankNTypes,
ScopedTypeVariables,
StandaloneDeriving,
TypeOperators,
TypeSynonymInstances,
UndecidableInstances,
ViewPatterns #-}
module MyModule where
import Prelude hiding (id, (.))
import Control.Arrow
import Control.Category
import Control.Exception
import Control.Monad
import Control.Monad.ST
import Data.Array.Diff
import qualified Data.Map as Map
import qualified Data.Set as Set
import qualified Data.Heap as Heap
import qualified Data.List as List
import qualified Data.List.Key as Key
import Data.List.HT
import Data.Maybe
import Data.STRef
import qualified Data.Text as T
Run Code Online (Sandbox Code Playgroud)
由于我没有使用任何花哨的IDE,我宁愿不在每个文件中阅读它.有没有办法创建某种"标准"/"实用程序"模块,重新导出这些函数的名称,所以我只需键入,
import MyCommonFuncs
Run Code Online (Sandbox Code Playgroud)
代替?
我知道这可能不是一个好的做法,也许在理论上应该添加必要的最小数量的进口,但正如我所说,我有时需要破解,而且少考虑的东西总是好的.
编辑 - 更重要的是,有时我想更改所有文件的块,因此当前单独导入所有内容的系统可能很繁琐.例如,假设我需要删除旧的import Time并将其更改为新的[原文如此?] import System.Time.然后,使用当前系统,我必须编辑所有文件.或者,也许我了解一个新的语言功能,并希望它始终可用 - 然后我必须手动更新旧的源文件.
Lan*_*nbo 18
您可以尝试使用语法
module MyCommonFuncs (
module Control.Arrow,
module Control.Category,
module Control.Exception,
module Control.Monad,
module Control.Monad.ST
)
import Control.Arrow
import Control.Category
import Control.Exception
import Control.Monad
import Control.Monad.ST
Run Code Online (Sandbox Code Playgroud)
执行此操作时,将导出这些模块中的所有函数,就像在模块MyCommonFuncs本身中定义一样.
对于LANGUAGEpragma,您可以在.cabal文件中定义所需的那个,它们全局使用.只是没有通过测试ghci.
希望这有帮助.
您当然可以编写一个自定义模块来重新导出所有这些导入.这实际上是基础库中的常见做法.见例如import Foreign,
module Foreign
( module Data.Bits
, module Data.Int
, module Data.Word
, module Foreign.Ptr
, module Foreign.ForeignPtr
, module Foreign.StablePtr
, module Foreign.Storable
, module Foreign.Marshal
...
Run Code Online (Sandbox Code Playgroud)
对于所有这些语言扩展,都不能这样说.默认情况下,所有这些都不是一个好的做法,在我看来,因为它几乎可以保证您将拥有不可移植且对编译器敏感的代码.