У меня часто есть привычка иметь стандартный блок импорта, поэтому я обычно использую функциональность под рукой, когда мне это нужно. Например,
-- 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
Поскольку я не использую какие-либо модные IDE, я бы предпочел не читать это в каждом файле. Есть ли способ создать какой-то «стандартный» / «служебный» модуль, который реэкспортирует имена этих функций, чтобы я мог просто набрать,
import MyCommonFuncs
вместо
Я знаю, что, возможно, это нехорошая практика, и, возможно, теоретически нужно добавить минимальное количество необходимого импорта, но, как я уже сказал, мне нужно иногда взламывать, и всегда нужно иметь меньше вещей, о которых нужно думать. *
РЕДАКТИРОВАТЬ - что более важно, иногда я хочу изменить блок для всех файлов , поэтому текущая система импорта всего по отдельности может быть утомительной. Предположим, например, что мне нужно удалить старый import Time
и заменить его на новый [sic?] import System.Time
. Затем, с текущей системой, я должен отредактировать все файлы. Или, может быть, я узнаю о новой языковой функции и хочу, чтобы она всегда была доступна - тогда мне нужно вручную обновить старые исходные файлы.