Haskell第一步编译错误

2023-12-14

我刚刚从这里安装了完整的 Haskell 平台和安装程序https://www.haskell.org/platform/mac.html

现在,作为菜鸟,我创建了一个非常简单的程序,只是为了看看它是否有效:

f :: Int -> Int
f x = x + 2

但是当我执行时

runhaskell test.hs

它返回

测试.hs:0:53:错误:

• 变量不在范围内:main :: IO a0

• 也许您的意思是“min”(从 Prelude 导入)

if i run

ghc test.hs

它返回

IO 操作“main”未在模块“Main”中定义

仅指示第一行“f”的第一个字符


通过你的程序你没有指示 Haskell 程序应该做什么。你只有定义了一个函数。这并不意味着 Haskell 会自动调用该函数。

您需要定义一个具有特殊名称的函数main (ghc有一个选项可以指定另一个名称,但现在让我们忽略它)。main是类型的函数IO a。它是一个描述动作的函数(IO)在执行程序时被调用。

由于您只定义了一个函数f,你可能想测试f.

所以我们可以写一个main:

main :: IO ()
main = print (f 2)

现在如果将其添加到程序中。编译器将生成一个可执行文件,该可执行文件将执行main. Here main非常简单:我们指示它print的结果f 2。所以它会打印4。我们称之为main the 入口点的程序。

您还可以决定运行交互的会话代替。在这种情况下,您不需要入口点,因为您可以在交互式会话中决定要调用哪些函数。

例如,您可以使用ghci file.hs启动交互式会话,然后运行:

$ ghci testprogram.hs 
GHCi, version 8.0.2: http://www.haskell.org/ghc/  :? for help
[1 of 1] Compiling Main             ( testprogram.hs, interpreted )
Ok, modules loaded: Main.
*Main> f 2
4

所以现在我们已经调用了f 2,交互会话自动打印结果4.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Haskell第一步编译错误 的相关文章

随机推荐

  • 在 Android 中以编程方式切换到开发者模式

    我想创建一个工具 允许在 Android 版本低于 4 2 的 Android 设备上切换到开发人员模式 我想创建一个 apk 来激活和停用开发者模式 这可能吗 如何 开发人员 模式是一种系统设置 因此只能从系统应用程序进行修改 即使用制造
  • 为什么当我转换为“long”时会调用“operator bool()”?

    我有以下课程 class MyClass public MyClass char what controlled what MyClass delete controlled operator char const return contr
  • 如何在渲染时为 React 组件设置动画?

    我正在尝试为包含从其他地方获取的数据的 React 组件设置动画 将其放置在ReactCSSTransitionGroup工作得很好 也就是说 直到我改变了组件的render 返回方法false直到数据被获取 到防止在没有数据的情况下渲染它
  • 如何从 C# 显示文件的“属性”对话框?

    如何打开文件的特性通过按钮进行对话框 private void button Click object sender EventArgs e string path C Users test Documents tes text how t
  • Java 9、10、11、12...等中的 javax.smartcardio

    从 Java 9 开始 javax smartcardio 库发生了什么 有替代方法或某种方式在 JAR 中获取它吗 在网上搜索了几个小时后 感谢上面的答案 据我了解 Java 9 及更高版本是模块化的 这是几年前计划的语言改进 此外 在新
  • 将两个导航控制器添加到一个选项卡栏项目

    我希望将 2 个导航控制器附加到一个选项卡栏项目 基本上 这个想法是在单个选项卡项上有 2 个视图 并且应该有一个导航栏来推动和弹出屏幕 与 iPad 中的设置应用程序相同 已编辑 看起来左侧有一个带有自己的导航控制器的视图 而右侧有另一个
  • 如何在 Swift 中增加 plus 设备上的字体和大小?

    我观察了一些流行的应用程序 当我们比较 iPhone Plus 设备和普通设备时 字体和图像是不同的 iPhone Plus 设备中稍大一些 我们如何在 iOS 应用程序中实现同样的目标 我已经使用过闪屏了 但字体仍然是相同的 在 plus
  • 为IE6中新打开的窗口设置OnLoad事件

    我需要为新弹出的窗口设置 onload 属性 以下代码适用于 Firefox a href www google com 但是 当我在 IE 中尝试此操作时 出现错误 printwindow document body null 或未定义
  • 从屏幕坐标查找世界坐标

    这个问题有很多答案 但我不确定它们都适用于 XTK 例如在 Three JS 中看到了多个答案 但显然 XTK 和 Three JS 没有相同的 API 使用射线和Matrix似乎与其他框架的许多其他解决方案非常相似 但我仍然没有掌握可能的
  • 算法 - 如何在 O(K) 中查找 Kt'h 元素并构建 O(n)

    我需要在 O k 中找到包含无序 n 元素的数组输入的 K 元素 满足以下要求 1 构建可以是O n 您可以使用给定的数组构建您想要的任何数据结构 2 找到O k 中的第k个元素 该算法在假设数组中没有重复元素的情况下工作 预处理 找到中间
  • 如何查看一个分支中的哪些提交不在另一分支中?

    我有两个分行devel and next 在开发中 我或多或少有大量的提交 一些提交是精心挑选的next 我还添加了一些提交到 next 并合并到devel 现在我想看看缺少什么next 这样我就可以在将更改提交之前详细测试它们next 我
  • 在android中创建一个定时服务

    我需要用java在android中创建一个日程服务 我尝试了一些代码 但在构建应用程序后它始终无法运行 我的逻辑很简单 我想创建一个服务来检查蓝牙文件夹路径中是否存在文件 如果该文件存在 那么该服务将运行另一个应用程序 我需要每 2 分钟运
  • StreamReader 不接受字符串?

    我正在尝试使用 StreamReader 读取文件 但使用时出现错误path 参数 1 无法从 string 转换为 System IO Stream 尽管从文档 那个你should能够使用字符串 我在这里缺少什么 public MyCla
  • 下一个导出脚本不适用于下一个/图像组件

    我有一个项目 我想构建并导出它 但出现错误 这是我的构建脚本package json file scripts build next build next export 这是我正在使用的组件next image import Image f
  • 如何检查Python字典中的内部字典中是否存在某个键?

    有一个Python字典 a b c x 1 y 2 z 3 我想知道是否a b c z 存在 但我还不知道是否a b c or a b 都存在 所以 如果我这样做 if z in a b c 我可能会得到一个 key c doesn t e
  • 为什么 C++ 模板类型匹配不检索引用限定符“&”?

    我有以下程序 include
  • 为什么在C语言中可以定义一个变量两次?

    我一直在测试全局变量 定义和声明 但我在这种情况下停了下来 main c include stdio h void func void int a int main void a 20 printf in main d n a func r
  • Java中如何通过分段请求上传大文件?

    我在用this教程上传大文件 但无法上传甚至 300KB 的文件 此外 它不会上传除 txt or log文件 需要可以帮助我上传大文件 无论文件类型如何 的指针 分享修改后的代码 public class MultipartUtility
  • sonarqube“应用项目排除”非常慢

    我们使用的是 sonarqube 5 1 1 应用项目排除 步骤通常非常非常慢 有时在 1 2 5 小时范围内 我们有 全局源文件排除 来排除 2 种模式 swagger ui min js 我不确定这是多久以前的更改 因为我们的 sona
  • Haskell第一步编译错误

    我刚刚从这里安装了完整的 Haskell 平台和安装程序https www haskell org platform mac html 现在 作为菜鸟 我创建了一个非常简单的程序 只是为了看看它是否有效 f Int gt Int f x x