When you use import ModuleName
in GHCi, it works (mostly) in the same way import Data.List
works: GHC checks your local package database for the module, loads it, and brings its (exported) contents into scope.
However, Geometry
isn’t a module of a package installed with ghc-pkg
. Therefore, GHC doesn’t know that a module Geometry
exists at all. Neither does it interactive variant GHCi.
But if you :l
oad a program, things change. GHC will take its used modules into account:
-- Foo.hs
module Foo where
foo :: IO ()
foo = putStrLn "Hello from foo!"
-- Main.hs
module Main where
import Foo (foo)
main :: IO ()
main = foo
$ cd /path/to/your/files $ ghci GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help Prelude> import Foo <no location info>: Could not find module ‘Foo’ It is not a module in the current program, or in any known package. Prelude> :l Main.hs [1 of 2] Compiling Foo ( Foo.hs, interpreted ) [2 of 2] Compiling Main ( Main.hs, interpreted ) Ok, modules loaded: Main, Foo. *Main> :l Main.hs *Main> foo Hello from foo! *Main> import Foo *Main Foo> -- module now loaded
As you can see, importing Foo
first failed. However, after we’ve actually loaded the program that uses Foo
, we were able to use import Foo
in GHCi.
So if you want to use import
in GHCi, make sure that GHC can find your module, either by including it in a wrapper or installing it. If you just want to load the module itself, use :l
oad.