如何在Haskell中设置`Text`而不是`String`的首选项

yhived7q  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(115)

我经常遇到这样的问题:当我需要Text时,GHC将"some text"解释为String,而这两者都是可以接受的,但后来在另一种用法中发现了错误,并强制使用显式类型注解。
有没有办法将GHC的首选项设置为首选Text而不是String?问题可能是the same as this one,但唯一的答案是非常沉重的,不太可能对我有用。还有更好的吗
我希望能够设置一个首选项,即未限定的"some text"Text类型,以避免以下人为示例中的错误:

import Data.Text

some = "some"
text1 = "text1":: Text 

two = Data.Text.concat [some, text1]
muk1a3rh

muk1a3rh1#

您可以在模块的顶部放置一个default声明,这样任何不明确的IsString值都将默认为Text

default (Integer, Double, Text)

在您的代码中,该类型没有二义性,因为您指定了一个仅限Text的函数。错误是由于未启用OverloadedStrings而导致的。下面是一个真正的模糊示例,它将受益于default声明。

{-# LANGUAGE OverloadedStrings #-}

import Data.Text

default (Integer, Double, Text)

some = "some"

main = print some

在GHCi中检查这个,显示:t someText。如果没有default声明,:t some就是[Char](即String)。

kcugc4gi

kcugc4gi2#

只需启用OverloadedStrings扩展名,这可以通过将{-# LANGUAGE OverloadedStrings #-}添加到文件的顶部来完成。
这将自动选择适当的“字符串”类型。

相关问题