我正在尝试编写一个将字符串作为输入并将其附加到文件的函数。该文件每次都是相同的文件。该函数正确编译,但显示错误
“没有实例(显示(字符串-> IO())) 源自使用“打印””。
代码是:
appendText :: String -> IO ()
appendText [] = return ()
appendText x = appendFile "testfile.txt" x
我知道问题与类型和Show类型有关,但是我在理解问题以及如何解决问题上遇到了麻烦。任何帮助都会很棒。
编辑:我将其称为函数,例如appendFile“随机文本”
答案 0 :(得分:3)
您是否尝试在GHCi中编写类似appendText
或print appendText
的文字?如果是这样,它将尝试Show
函数,这是类型错误,因为函数类型没有Show
实例。您需要使用一个参数来调用它,即要附加到String
的特定testfile.txt
:
appendText "test text"
此类型为IO ()
,因此可以执行此操作,运行后,您应该会看到文本出现在文件中。
您的函数也可以更简单地写为:
appendText x = appendFile "testfile.txt" x
或采用无点形式:
appendText = appendFile "testfile.txt"
答案 1 :(得分:0)
很明显,删除第二行允许该功能工作:
appendText ::字符串-> IO()
appendText = appendFile“ testfile.txt”
我不确定为什么可以解决此问题,该行用于错误处理,但显然不需要。不过,它可以工作,谢谢您的帮助。