GHCi没有看到我的模块

时间:2013-11-27 15:08:35

标签: haskell module

制作一个模块Timeit。我无法将其导入GHCi。 模块:

module Timeit (timeit, timeCatch) where
import Data.Time.Clock

timeit::IO ()->IO (Float)
timeit io=do
    (time,())<-timeCatch io
    return time

timeCatch::IO (a)->IO (Float,a)
timeCatch io=do
    start  <-getCurrentTime
    result <-io
    end    <-getCurrentTime
    return $! (realToFrac (diffUTCTime end start), result)

test=do
    putStrLn "What is your name?"
    name <- getLine
    putStrLn $ "Your name is "++name++"."

GHCI:

theking@ChrisLaptopUbuntu1304:~/Desktop/Haskell$ cd ~/Desktop/Haskell/; ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> import Timeit

<no location info>:
    Could not find module `Timeit'
    Perhaps you meant Time (needs flag -package haskell98-2.0.0.2)

我可以将它导入我的其他程序,而不是GHCi。

注意:我是haskell noob。

2 个答案:

答案 0 :(得分:3)

为了让GHCi导入模块,你必须确保一些事情是真的。

首先,你在同一个目录中吗?默认情况下,GHCi只搜索当前目录中的模块。

其次,您是否添加了模块标题?您的代码应以

开头
 module Timeit where
 ...

第三,您的文件实际上必须命名为Timeit.hs(使用该大小写)。 默认情况下,Haskell会插入module Main where,如果您的模块不是主模块,则会出现问题。

最后但同样重要的是,GHCi似乎要求您至少使用:l Timeit一次。我不确定为什么会这样,但是一旦加载,您就可以使用:m将其从范围中删除,然后将其导入您的内容。

如果你已经完成了这些事情,它应该导入得很好。

答案 1 :(得分:0)

要从ghci导入模块,请不要使用import,而是使用

:m +TimeIt