How to import a .hs file in Haskell

HaskellSyntaxModule

Haskell Problem Overview


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?

Haskell Solutions


Solution 1 - Haskell

Time.hs:

module Time where
...

script.hs:

import Time
...

Command line:

ghc --make script.hs

Solution 2 - Haskell

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 - Haskell

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJonno_FTWView Question on Stackoverflow
Solution 1 - HaskellyairchuView Answer on Stackoverflow
Solution 2 - HaskellChristianView Answer on Stackoverflow
Solution 3 - Haskelluol3cView Answer on Stackoverflow