我正在学习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或其他什么的情况下使用它是完全可能的。
"我的作业需要…"然后问你的老师。首先检查她是否已经给了你答案(在问题陈述或课堂上)。