尝试编写Haskell函数以获取字符串参数并追加到文件

时间:2019-04-20 18:10:51

标签: haskell io

我正在尝试编写一个将字符串作为输入并将其附加到文件的函数。该文件每次都是相同的文件。该函数正确编译,但显示错误

“没有实例(显示(字符串-> IO()))         源自使用“打印””。

代码是:

appendText :: String -> IO ()

appendText [] = return ()

appendText x = appendFile "testfile.txt" x 

我知道问题与类型和Show类型有关,但是我在理解问题以及如何解决问题上遇到了麻烦。任何帮助都会很棒。

编辑:我将其称为函数,例如appendFile“随机文本”

2 个答案:

答案 0 :(得分:3)

您是否尝试在GHCi中编写类似appendTextprint 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”

我不确定为什么可以解决此问题,该行用于错误处理,但显然不需要。不过,它可以工作,谢谢您的帮助。