簡體   English   中英

如何在 GHCi 中導入 Haskell 模塊?

[英]How can I import a Haskell module in GHCi?

我正在嘗試從《Learn You A Haskell for Great Good》這本書中自學 Haskell。 我讀到了第 7 章(模塊)的最后一節,它講述了如何創建自己的模塊。 我復制並粘貼了該部分開頭書中給出的幾何模塊。 該文件的名稱是 Geometry.hs,正如書中所建議的,該文件位於 ghci 的 bin 目錄中,這是我以前能夠使用 :l 成功加載另一個 .hs 文件的地方。

當我在 GHCi 中輸入以下命令時

import Geometry

我收到以下錯誤:

找不到模塊“幾何”它不是當前程序或任何已知包中的模塊

我一定在做一些明顯錯誤的事情,但我無法弄清楚它是什么。

當您在 GHCi 中使用import ModuleName時,它的工作方式(大部分)與import Data.List工作方式相同:GHC 檢查您本地包數據庫中的模塊,加載它,並將其(導出的)內容引入范圍。

但是, Geometry不是隨ghc-pkg安裝的軟件包的模塊。 因此,GHC 根本不知道Geometry模塊的存在。 它也不是交互式變體 GHCi。

但是如果你:l加載一個程序,事情就會改變。 GHC 將考慮其使用的模塊:

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

如您所見,首先導入Foo失敗了。 然而,在我們實際加載了使用Foo的程序之后,我們就可以在 GHCi 中使用import Foo了。

因此,如果您想在 GHCi 中使用import ,請確保 GHC 可以找到您的模塊,方法是將其包含在包裝器中或安裝它。 如果您只想加載模塊本身,請使用:l oad。

TLDR:Learn you a Haskell 一書中沒有提到你必須先:load Geometry.hs文件。 然后:m返回Prelude ,然后import Geometry作品。

現在也可以在安裝包時添加 lib 標志,即運行cabal install --lib packagename然后直接在 GHCi 中導入相應的包。 在目前的情況下,例如cabal install --lib hgeometry將有助於從此幾何包導入模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM