[英]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.