我想自动写一个文件输出我的程序,但是出现了一些错误。我是哈斯克尔的新手。
一个非常简单的例子:
func = do
writeFile "file.txt" show(calc)
calc = do return (1+1)
我想要这样的东西。当我执行该函数时,创建一个文件并在其上书写
错误是:
错误“test.hs”:5 - 输入中的语法错误(意外的`=')
感谢。
答案 0 :(得分:5)
此代码中有几个错误:
do
以简化func
和calc
。从技术上讲,这不是一个错误,但你不应该使用不必要的do
,因为它们会使你的代码混乱。show
的类型为Show a => a -> String
,而calc
的类型为IO String
。由于类型不匹配,您的程序将无法编译。这是一个具有相同功能的程序,可以编译:
func :: IO () -- is an IO action
func = writeFile "file.txt" (show calc) -- removed the do
calc :: Integer -- has type integer, meaning "show" is able to operate on it
calc = 1+1 -- removed do and return
删除回复的原因是return
不的行为与C语言中的return
相似。 Haskell中的return
在monadic动作中包含一个值,而在类C语言中,它只返回一个表达式的值或一个变量作为函数的结果。我建议阅读this章节以获取更多信息,因为它很好地涵盖了Haskell的输入和输出。