Difference between revisions of "Import"

From HaskellWiki
Jump to navigation Jump to search
(rm cases that realistically do not get used)
(import/hide more than one symbol)
Line 24: Line 24:
 
| (Useful for only importing instances of typeclasses and nothing else)
 
| (Useful for only importing instances of typeclasses and nothing else)
 
|-
 
|-
| <hask>import Mod (x)</hask>
+
| <hask>import Mod (x,y)</hask>
| <hask>x, Mod.x</hask>
+
| <hask>x, y, Mod.x, Mod.y</hask>
| (Only <hask>x</hask>, no <hask>y</hask> or <hask>z</hask>.)
+
| (Only <hask>x</hask> and <hask>y</hask>, no <hask>z</hask>.)
 
|-
 
|-
 
| <hask>import qualified Mod</hask>
 
| <hask>import qualified Mod</hask>
Line 32: Line 32:
 
| (Only qualified versions; no unqualified versions.)
 
| (Only qualified versions; no unqualified versions.)
 
|-
 
|-
| <hask>import qualified Mod (x)</hask>
+
| <hask>import qualified Mod (x,y)</hask>
| <hask>Mod.x</hask>
+
| <hask>Mod.x, Mod.y</hask>
| (Only <hask>x</hask>, only qualified.)
+
| (Only <hask>x</hask> and <hask>y</hask>, only qualified.)
 
|-
 
|-
| <hask>import Mod hiding (x)</hask>
+
| <hask>import Mod hiding (x,y)</hask>
| <hask>y, z, Mod.y, Mod.z</hask>
+
| <hask>z, Mod.z</hask>
| (<hask>x</hask> is hidden.)
+
| (<hask>x</hask> and <hask>y</hask> are hidden.)
 
|-
 
|-
| <hask>import qualified Mod hiding (x)</hask>
+
| <hask>import qualified Mod hiding (x,y)</hask>
| <hask>Mod.y, Mod.z</hask>
+
| <hask>Mod.z</hask>
| (<hask>x</hask> is hidden.)
+
| (<hask>x</hask> and <hask>y</hask> are hidden.)
 
|-
 
|-
 
| <hask>import Mod as Foo</hask>
 
| <hask>import Mod as Foo</hask>
Line 48: Line 48:
 
| (Unqualified names as before. Qualified names use <hask>Foo</hask> instead of <hask>Mod</hask>.)
 
| (Unqualified names as before. Qualified names use <hask>Foo</hask> instead of <hask>Mod</hask>.)
 
|-
 
|-
| <hask>import Mod as Foo (x)</hask>
+
| <hask>import Mod as Foo (x,y)</hask>
| <hask>x, Foo.x</hask>
+
| <hask>x, y, Foo.x, Foo.y</hask>
| (Only import <hask>x</hask>.)
+
| (Only import <hask>x</hask> and <hask>y</hask>.)
 
|-
 
|-
 
| <hask>import qualified Mod as Foo</hask>
 
| <hask>import qualified Mod as Foo</hask>

Revision as of 17:29, 13 February 2007

The import statement is used to import functions and other definitions from another module. In the simplest case, you just write

import Data.Maybe

to import the named module (in this case Data.Maybe).

However, in more complicated cases, the module can be imported qualified, with or without hiding, and with or without renaming. Getting all of this straight in your head is quite tricky, so here is a table (lifted directly from the language reference manual) that roughly summarises the various possibilities:

Suppose that module Mod exports threefunctions named x, y and z. In that case:

Import command What is brought into scope Notes
import Mod x, y, z, Mod.x, Mod.y, Mod.z (By default, qualified and unqualified names.)
import Mod () (Nothing!) (Useful for only importing instances of typeclasses and nothing else)
import Mod (x,y) x, y, Mod.x, Mod.y (Only x and y, no z.)
import qualified Mod Mod.x, Mod.y, Mod.z (Only qualified versions; no unqualified versions.)
import qualified Mod (x,y) Mod.x, Mod.y (Only x and y, only qualified.)
import Mod hiding (x,y) z, Mod.z (x and y are hidden.)
import qualified Mod hiding (x,y) Mod.z (x and y are hidden.)
import Mod as Foo x, y, z, Foo.x, Foo.y, Foo.z (Unqualified names as before. Qualified names use Foo instead of Mod.)
import Mod as Foo (x,y) x, y, Foo.x, Foo.y (Only import x and y.)
import qualified Mod as Foo Foo.x, Foo.y, Foo.z (Only qualified names, using new qualifier.)