可编译/可执行Haskell源代码示例



我正在学习Haskell,这是我正在学习的编程语言课程的一部分。我很难理解如何编写整个Haskell程序。我理解GHCi中使用的基本语法,但我的作业需要创建.hs文件,并使用以下命令在Windows CMD中编译/执行它们:

ghc -o test test.hs
test.exe

如果有人能解释如何写下面的例子,那么我想我会理解我需要什么来继续。

module Main where
double :: Integer -> Integer
double x = x * 2
main :: IO ()
main = double 6

我在这里所要做的就是编写一个返回整数参数的双精度的函数,并使用参数"6"对该函数进行主调用。在分离.hs文件中的主模块和功能模块方面,我应该采取哪些不同的做法?谢谢你的帮助。

这里的问题是,当GHC编译代码时,它希望main具有适合程序入口点的类型。它需要具有"进行输入输出的代码"类型,因为否则Haskell程序实际上不会做任何可观察的事情!

也就是说,它期望为一些X找到main :: IO X。有main :: IO ()被认为是一种很好的实践,这意味着main是一个进行输入输出并最终产生()的程序,这是一个微不足道的结果。

当前您有main :: Integer,这是一个类型错误。解决这个问题需要你决定程序在运行时要做什么,一个好的默认设置是打印一些东西。我们可以使用函数print :: Show a => a -> IO (),它将使用show将提供的值转换为字符串,并将其打印为标准输出。所以我们可以写

 main :: IO ()
 main = print (double 6)

一切都会像你在REPL一样工作。

一般来说,请在真实世界Haskell中阅读更多关于IO的内容。在不了解monad或其他什么的情况下使用它是完全可能的。

"我的作业需要…"然后问你的老师。首先检查她是否已经给了你答案(在问题陈述或课堂上)。

相关内容

  • 没有找到相关文章

最新更新