6

我对 Haskell 完全陌生。为了掌握基础知识,我开始通过“Learn you a Haskell for Great Good”来学习。我被困在从文件加载函数的简单问题上。

该文件被调用baby.hs并包含函数

doubleMe x = x + x

没有别的了。我已经把它保存在/Users/me.

输入:load babyGHCi,我收到以下错误:

target `baby' 不是模块名称或源文件。

我在 Mac 上工作,我baby.hs使用 TextEdit 集创建了我的文件以生成纯文本/UTF-8 文件。我认为我的主目录是/Users/me虽然我不确定如何从 GHCi 中检查它,但它是从我在运行 GHCi 之前从 bash 检查时开始的。

知道我做错了什么吗?

4

5 回答 5

4

正如@clintm 建议的那样,首先修复您的 doubleMe 功能。你所拥有的会给出错误——但不会给出你报告的错误。

让 ghci 找到文件的最简单方法是确保从保存文件的同一目录启动 ghci。打开终端窗口,然后键入

cd /Users/me
ls

ls列出当前目录的内容;你应该看到你的文件。如果你这样做了,太好了!在 bash 提示符下键入ghci:load baby应该可以工作。如果没有,您还没有将文件保存在您认为有的位置。返回到 TextEdit 或使用 Spotlight 来查看您实际放置的位置。

于 2011-10-12T11:08:46.160 回答
2

您缺少模块行。baby.hs 的第一行应该是

module Baby where

doubleMe目前而言,您缺少将其声明x为函数的参数。

doubleMe x = x + x

否则,您的函数不知道是什么x

于 2011-10-12T00:01:02.323 回答
2

尝试使用完整路径,例如:

:load /Users/me/baby.hs

您还应该能够使用相对路径。尝试导航到第一个目录baby.hs

% cd /Users/me
% ghci
GHCi blah blah blah
Prelude> :load baby.hs

当你得到它的工作时,然后尝试离开.hs. 我不是 100% 确定在什么情况下有效。

于 2011-10-12T02:59:44.667 回答
0

@Alec:“问题在于该文件实际上被称为 baby.hs.txt 但我没有发现它,因为 Finder 出于某种原因隐藏了 .txt 部分。”

您可以在 TextEdit 中解决此问题...

  • 选择你的 baby.hs.txt 文件

  • 两指点击它以弹出上下文菜单

  • 选择获取信息以打开文件的信息对话框

  • 在 Name & Extension 区域输入 baby.hs

  • 关闭信息对话框

  • 另一个对话框询问您是否真的想要 .hs 扩展名

  • 确认你这样做并且你很好

于 2013-04-21T04:24:19.560 回答
0

尝试用 GHCi 打开文本文件,然后输入你的命令就可以了

于 2019-03-06T02:09:51.970 回答