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

时间:2016-04-05 15:27:06

标签: haskell module compilation main

我正在学习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

我想要做的就是编写一个返回整数参数的double的函数,并使用参数' 6'进行主调用。在分离.hs文件中的主模块和功能模块时,我应该做些什么?谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

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

也就是说,它希望找到某些main :: IO X的{​​{1}}。将X表示main :: IO ()是一个执行输入输出并最终生成main的程序,这是一个很好的做法,这是一个微不足道的结果。

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

show

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

一般情况下,请详细了解Real World Haskell中的 main :: IO () main = print (double 6) 。完全可以在不了解monad或其他任何东西的情况下使用它。

答案 1 :(得分:0)

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