gpt4 book ai didi

haskell - 在 ghci 中指定 "load"操作的搜索路径

转载 作者:行者123 更新时间:2023-12-04 14:13:44 25 4
gpt4 key购买 nike

Loading source files它声明查找源文件的搜索路径是使用 -i 选项指定的:

ghci -idir1:...:dirn

这是否意味着当一个人执行时:
:load test.hs

然后 ghci 在上面的目录中查找 test.hs?我看到了回复
Problem Specifying Source Directory to GHC但我仍然不清楚这一点。

例如,在 Windows XP 中,我将 test.hs 放入:
C:\Documents and Settings\winuser\My Documents

然后跑:
ghci -iC:\Documents and Settings\winuser\My Documents

然而在做 :load test.hs , ghci 提示找不到文件。

[编辑 1]

我想避免使用 :cd因为它会卸载所有加载的模块,这会阻止我从多个位置加载文件

[编辑 2:对 jozefg 的回应]
--C:\A\A.hs
module A where
myaddA::Int->Int->Int
myaddA x y = x+y

--C:\B\B.hs
module B where
myaddB::Int->Int->Int
myaddB x y = x+y

然后我可以执行以下操作:
Prelude> :cd C:\A
Prelude> :load A
[1 of 1] Compiling A ( A.hs, interpreted )
Ok, modules loaded: A.
*A> myaddA 2 3
5
*A> :cd C:\B
Warning: changing directory causes all loaded modules to be unloaded,
because the search path has changed.
Prelude> :load B
[1 of 1] Compiling B ( B.hs, interpreted )
Ok, modules loaded: B.
*B> myaddB 3 4
7

但是,当模块存储在不同位置的文件中时,我还没有找到使模块 A 和 B 同时可用的方法

[编辑 3:对 jozefg 的回应]
>ls
temp temp2
>more temp/A.hs
module A where
addA = (+)
>more temp2/B.hs
module B where
addB = (+)
>cd temp
>ghci -i../temp2
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 A B

<interactive>:1:10: parse error on input `B'

[编辑 4:对 jozefg 的回应]
>ls
temp temp2
>more temp/A.hs
module A where
addA = (+)
>more temp2/B.hs
module B where
addB = (+)
>cd temp
>ghci -i../temp2
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 A

<no location info>:
Could not find module `A'
It is not a module in the current program, or in any known package.
Prelude> import B

<no location info>:
Could not find module `B'
It is not a module in the current program, or in any known package.

最佳答案

加载路径是 GHCi 搜索模块的方式。因此,如果您将模块命名为 Test.hs并添加

 module Test where

比你能做的
 > :load Test

否则你可以使用
 > :cd SomeDirectory
> :load test.hs

回复编辑:

(警告,我运行 eshell 所以命令/路径看起来不同)
~         $ mkdir temp
~ $ mkdir temp/temp temp/temp2
temp $ find-file temp/A.hs
-- In A.hs
module A where
addA = (+)
--
temp $ find-file temp2/B.hs
-- In B.hs
module B where
addB = (+)
--
temp $ cd temp
temp/temp $ ghci -i../temp2
> :load A B
> import B

现在我可以访问这两个 AB .

关于haskell - 在 ghci 中指定 "load"操作的搜索路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20078059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com