-- Module declaration with explicit exports: exports only specified items, hiding others. -- Here, exporting a function, a type with all constructors, a class, and a module re-export. module ExampleModule ( myFunction -- Exports the function myFunction , MyType(..) -- Exports type MyType and all its constructors/patterns , class MyClass -- Exports the class MyClass , module Data.Maybe -- Re-exports everything from Data.Maybe ) where -- Simple import: imports all exported items from Prelude unqualified. import Prelude -- Empty import list: imports nothing explicitly, but allows qualified access if qualified. import Prelude () -- Specific imports: imports only listed items unqualified. import Prelude (not, (&&)) -- Imports not and && operators. -- Import type with specific constructors: imports MyType but only Con1 and Con2. import ExampleModule (MyType(Con1, Con2)) -- Imports Con1 and Con2 for MyType. -- Import type with all constructors: imports MyType and all its constructors. import ExampleModule (MyType(..)) -- Imports MyType and all constructors/patterns. -- Import class: imports the class MyClass. import ExampleModule (class MyClass) -- Imports MyClass class. -- Hiding specific items: imports all from Prelude except not and &&. import Prelude hiding (not, (&&)) -- Excludes not and && from import. -- Qualified import: imports all from Data.List qualified, access via Data.List.name. import qualified Data.List -- Qualified with hiding: imports qualified, excluding intersect. import qualified Data.List hiding (intersect) -- Excludes intersect, others via Data.List. -- Qualified with specific items: imports only sort and length qualified. import qualified Data.List (sort, length) -- Access via Data.List.sort, Data.List.length. -- Import as alias: imports all from Data.Map unqualified, but alias for qualified use. import Data.Map as M -- Unqualified access, or M. for qualified. -- Qualified as alias: imports qualified with alias DM. import qualified Data.Map as DM -- Access via DM.name. -- Qualified as alias with specific items: imports only lookup and insert as DM. import qualified Data.Map (lookup, insert) as DM -- DM.lookup, DM.insert. -- Qualified as alias hiding: imports qualified as DM, hiding delete. import qualified Data.Map hiding (delete) as DM -- Excludes delete, others via DM. -- ghci -i path/to/my/custom/module/ Executable.hs import MyCustomModule -- Imports from specified source file. -- Import safe: imports only safe exports (no unsafePerformIO etc.). import safe System.IO.Unsafe -- Imports only safe items. -- Qualified safe: imports qualified and safe. import safe qualified System.IO.Unsafe as Unsafe -- Unsafe.name, only safe items. -- Import instances: instances are imported automatically with types/classes (no explicit syntax). -- Re-exporting: as shown in module header, use module OtherModule to re-export. -- Note: Exports control visibility; if not in export list, hidden unless open module.