如何在ihaskell笔记本中设置OverloadedStrings?

时间:2019-04-11 22:07:18

标签: haskell ihaskell overloaded-strings

sample notebook我了解到,我应该能够启用和禁用扩展,如下所示:

-- We can disable extensions. 
:ext NoEmptyDataDecls 
data Thing

<interactive>:1:1: error:
    • ‘Thing’ has no constructors (EmptyDataDecls permits this)
    • In the data declaration for ‘Thing’

-- And enable extensions.
:ext EmptyDataDecls
data Thing

但是,当我尝试使用OverloadedStrings时,我看不到任何成功。您可以从下面看到,T.lines在寻找字符串而不是文本。为什么?

enter image description here

我误解或做错了什么?

1 个答案:

答案 0 :(得分:0)

好消息:上面的笔记本确实已正确加载OverloadedStrings。问题是您需要使用以下命令读取文件:

T.readFile

所以

main :: IO ()
main = do
  text <- T.readFile "./data.txt"
  print $ T.lines text

这令人困惑,因为错误突出显示了T.lines而不是readFile.事实证明readFile不会产生文本数据形式,该文本数据会自动转换为{{1 }}(它产生T.lines,而不是String)。您必须知道,还有另一个完全可以调用此功能的函数。类型系统不会为您在这些类似字符串的格式之间进行转换。您必须自己执行此操作,方法是调用一个文件读取函数,该函数显式返回一个Text:这里是Text