gpt4 book ai didi

haskell - ghci没有从文件加载函数

转载 作者:行者123 更新时间:2023-12-03 14:57:37 24 4
gpt4 key购买 nike

在 test.hs 中,我有:

doubleMe x = x + x

在 ghci 中,我输入:
Prelude> :l test
[1 of 1] Compiling Main ( test.hs, interpreted )
Ok, modules loaded: Main.
*Main> doubleMe 9

<interactive>:1:0: Not in scope: `doubleMe'
*Main>

为什么?怎么修?

最佳答案

我的猜测是您在源文件中定义了一个主函数。

如果您定义了 main函数,使用 :l test 加载模块不会导入任何函数,但 main .在这种情况下,您可以通过在模块名称前添加星号来加载它::l *test .
原因是编译后的二进制文件会隐藏未导出的顶级函数。前置星号会强制 GHCi 忽略预编译模块(test)并转而解释源文件(test.hs)。

[jkramer/sgi5k:.../haskell]# cat test.hs 

main = do
print $ doubleMe 2

doubleMe x = x + x

[jkramer/sgi5k:.../haskell]# ghc --make test
[jkramer/sgi5k:.../haskell]# ghci
[...some messages...]
>> :l test
Ok, modules loaded: Main.
>> :t doubleMe

<interactive>:1:0: Not in scope: `doubleMe'
>> :l *test
[1 of 1] Compiling Main ( test.hs, interpreted )
Ok, modules loaded: Main.
>> :t doubleMe
doubleMe :: (Num a) => a -> a

检查这些链接以获取更多信息:

http://www.haskell.org/ghc/docs/6.12.2/html/users_guide/ghci-compiled.html
http://www.haskell.org/ghc/docs/6.12.2/html/users_guide/interactive-evaluation.html#ghci-scope

关于haskell - ghci没有从文件加载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2950185/

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