{-# LANGUAGE DeriveTraversable #-} module Require.Types where import Relude -- | A type-safe wrapper around a fully qualified module name. newtype ModuleName = ModuleName { unModuleName :: Text } deriving (Eq, Show) -- | Describes the different directives which require special processing during -- the transformation step. data RequireDirective = ModuleDirective ModuleName | RequireDirective RequireInfo | AutorequireDirective -- | Describes the contents of a parsed @require@ directive. -- -- @ -- require /riFullModuleName/ as /riModuleAlias/ (/riImportedTypes/) -- @ data RequireInfo = RequireInfo { riFullModuleName :: !ModuleName, riModuleAlias :: !Text, riImportedTypes :: !Text } deriving (Show) data AutorequireMode a = AutorequireEnabled a -- ^ Include the contents of the Requires file directly after the @module … -- where@ directive. | AutorequireOnDirective (Maybe a) -- ^ Include the contents of the Requires file when the user specifies the -- @autorequire@ directive. | AutorequireDisabled -- ^ Don't do any auto-requiring. deriving (Functor, Foldable, Traversable)