Как импортировать файл .hs в Haskell

Я создал файл под названием time.hs. Он содержит единственную функцию, которая измеряет время выполнения другой функции.

Есть ли способ импортировать time.hs файл в другой скрипт Haskell?

Я хочу что-то вроде:

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

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

Где время определяется в файле "time.hs" как:

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

Я не знаю, как импортировать или загрузить отдельный .hs файл. Нужно ли перед импортом скомпилировать time.hs файл в модуль?


person Jonno_FTW    schedule 17.09.2009    source источник


Ответы (3)


Time.hs:

module Time where
...

script.hs:

import Time
...

Командная строка:

ghc --make script.hs
person yairchu    schedule 17.09.2009
comment
Я давно понял, что в этом примере script.hs должен находиться в вашем текущем рабочем каталоге. Это означает, например, что вы не можете делать ghc --make path/to/script.hs. - person Jesse Looney; 13.08.2020

Если модуль Time.hs находится в том же каталоге, что и ваш основной модуль, вы можете просто ввести:

import Time

Можно использовать иерархическую структуру, так что вы можете написать import Utils.Time. Насколько я знаю, так, как вы хотите, это не сработает.

Для получения дополнительной информации о модулях см. Здесь Изучите Haskell, создавая наши собственные модули.

person Christian    schedule 17.09.2009

Скажем, у меня есть два файла в одном каталоге: ModuleA.hs и ModuleB.hs.

ModuleA.hs:

module ModuleA where
...

ModuleB.hs:

module ModuleB where

import ModuleA
...

Я могу сделать это:

    ghc -I. --make ModuleB.hs

Примечание. Имя модуля и имя файла должны совпадать. В противном случае он не может скомпилироваться. Что-то вроде

Не удалось найти модуль "..."

произойдет.

person Jee lee    schedule 12.04.2017