string - Haskell 中的 Data.Text 常量

标签 string haskell text compiler-errors

在Data.Text的文档中,有replace "oo" "foo" "oo"等例子。 .但是,当我尝试运行它时,它告诉我函数 replace 需要 Text,但得到 String。现在,当然,我可以使用 pack在每一个常量前面把Strings 变成Text 类型,但是这样比较不方便。有没有办法像在文档中那样编写文本常量?

最佳答案

Data.Text 的文档所有示例都有 OverloadedStrings 扩展启用。这将为所有字符串文字添加一个隐式 fromString函数调用。

例如:

$ ghci -XOverloadedStrings
GHCi, version 8.0.2: http://www.haskell.org/ghc/  :? for help
Loaded GHCi configuration from /home/kommusoft/.ghc/ghci.conf
Prelude> import Data.Text
Prelude Data.Text> replace "oo" "foo" "oo"
"foo"

或者您可以将其添加为 Haskell 文件中的编译指示:
{-# LANGUAGE OverloadedStrings #-}

import Data.Text

foo = replace "oo" "foo" "oo"

通过使用 OverloadedString s 您可以创建自己的类型来处理字符串文字。例如,您可以创建一个类型:
import Data.String

newtype SpecialString = SpecialString String

instance IsString SpecialString where
    fromString = SpecialString

现在您可以使用字符串文字,这些可以根据上下文转换为 SpecialString .

关于string - Haskell 中的 Data.Text 常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58039818/

相关文章:

list - 无法理解 Haskell 中的原始递归定义

javascript - 使用 javascript/jQuery 在 IE9 及以下版本中禁用/只读输入文本

python - pandas str.extractall() 和 pandas str.extract() 有什么区别?

c - 如何在 Dynamic C 中正确地从函数返回字符串?

haskell - 在 nix-shell 中找不到模块

haskell - 如何将 Data.Default 与 Network.HTTP.Client 结合使用

c#比较两个文本文件并生成一个有差异的新文件

java - 特定数字检测器问题

java - 如何将字符串(通过匹配一组正则表达式)拆分为标记并在 JAVA 中打印每个标记?

c++ - 如何修改它才能正常工作?