首页 > 解决方案 > Haskell 中的 Data.Text 常量

问题描述

在 Data.Text 的文档中,有replace "oo" "foo" "oo". 但是,当我尝试运行它时,它告诉我函数替换需要文本,但得到了字符串。现在,当然,我可以pack在每个常量前面使用将字符串转换为文本类型,但这很不方便。有没有办法像在文档中那样编写文本常量?

标签: stringhaskelltextcompiler-errors

解决方案


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"

通过使用OverloadedStrings,您可以创建自己的与字符串文字一起使用的类型。例如,您可以创建一个类型:

import Data.String

newtype SpecialString = SpecialString String

instance IsString SpecialString where
    fromString = SpecialString

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


推荐阅读