我想自动写一个文件输出我的程序,但是出现了一些错误.我是哈斯克尔的新手.
一个非常简单的例子:
func = do
writeFile "file.txt" show(calc)
calc = do return (1+1)
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西.当我执行该函数时,创建一个文件并在其上写
错误是:
错误"test.hs":5 - 输入中的语法错误(意外的`=')
谢谢.
此代码中有几个错误:
dos以简化func和calc.从技术上讲,这不是一个错误,但你不应该使用不必要的dos,因为它们只会弄乱你的代码.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
Run Code Online (Sandbox Code Playgroud)
除去返回的原因是,return它不会表现得像return在类似C语言.return在Haskell中,在一个monadic动作中包含一个值,而在类C语言中它只返回一个表达式的值或一个变量作为函数的结果.我建议阅读这一章以获取更多信息,因为它涵盖了在Haskell输入和输出相当不错.