-1

我从示例笔记本中了解到,我应该能够启用和禁用扩展,如下所示:

-- 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 正在寻找 String 而不是 Text。为什么?

在此处输入图像描述

我有什么误解或做错了什么?

4

1 回答 1

0

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

T.readFile

所以

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

这很令人困惑,因为突出显示的错误T.lines而不是readFile.事实证明readFile不会产生一种文本数据形式,该形式会自动转换为T.lines(它产生String,而不是Text)所需的格式。你必须知道有一个完全其他的函数可以调用它来做到这一点。类型系统不会为您在这些类似字符串的格式之间进行转换。您必须自己通过调用显式返回Text: 的文件读取函数来执行此操作,T.readFile.

于 2019-04-25T06:14:30.377 回答