use*_*602 3 string text haskell 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"Run Code Online (Sandbox Code Playgroud)
或者,您也可以在Haskell文件中将其添加为编译指示:
{-# LANGUAGE OverloadedStrings #-}
import Data.Text
foo = replace "oo" "foo" "oo"Run Code Online (Sandbox Code Playgroud)
通过使用OverloadedStrings,可以使自己的类型适用于字符串文字。例如,您可以输入:
import Data.String
newtype SpecialString = SpecialString String
instance IsString SpecialString where
fromString = SpecialStringRun Code Online (Sandbox Code Playgroud)
现在,您可以使用字符串文字了,并且可以根据上下文将其转换为SpecialString。