How to import a .hs file in Haskell

I have made a file called time.hs. It contains a single function that measures the execution time another function.

Is there a way to import the time.hs file into another Haskell script?

I want something like:

module Main where
import C:\Haskell\time.hs

main = do
    putStrLn "Starting..."
    time $ print answer
    putStrLn "Done."

Where time is defined in the 'time.hs' as:

module time where
Import <necessary modules>

time a = do
start <- getCPUTime
v <- a
end   <- getCPUTime
let diff = (fromIntegral (end - start)) / (10^12)
printf "Computation time: %0.3f sec\n" (diff :: Double)
return v

I don't know how to import or load a separate .hs file. Do I need to compile the time.hs file into a module before importing?


Solution 1:

Time.hs:

module Time where
...

script.hs:

import Time
...

Command line:

ghc --make script.hs

Solution 2:

If the module Time.hs is located in the same directory as your "main" module, you can simply type:

import Time

It is possible to use a hierarchical structure, so that you can write import Utils.Time. As far as I know, the way you want to do it won't work.

For more information on modules, see here Learn You a Haskell, Making Our Own Modules.

Solution 3:

Say I have two files in the same directory: ModuleA.hs and ModuleB.hs.

ModuleA.hs:

module ModuleA where
...

ModuleB.hs:

module ModuleB where

import ModuleA
...

I can do this:

    ghc -I. --make ModuleB.hs

Note: The module name and the file name must be the same. Otherwise it can't compile. Something like

Could not find module '...'

will occur.