Я часто имею привычку иметь стандартный блок импорта, поэтому я часто использую функциональность под рукой, когда мне это нужно. Например,
-- 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
вместо
Я знаю, что это, может быть, не очень хорошая практика, и, может быть, в теории нужно добавить минимальное количество необходимых им импорта, но, как я уже сказал, мне нужно иногда взламывать, и иметь меньше вещей, о которых нужно думать, всегда хорошо.
EDIT - что более важно, иногда я хочу изменить блок для всех файлов, поэтому текущая система импорта всего по отдельности может быть утомительной. Предположим, например, что мне нужно удалить старый import Time
и изменить его на новый [sic?] import System.Time
. Затем, с текущей системой, я должен редактировать все файлы. Или, может быть, я узнаю о новой языковой функции и хочу, чтобы она всегда была доступна - тогда мне нужно вручную обновить старые исходные файлы.