我经常遇到这样的问题:当我需要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]
2条答案
按热度按时间muk1a3rh1#
您可以在模块的顶部放置一个
default
声明,这样任何不明确的IsString
值都将默认为Text
。在您的代码中,该类型没有二义性,因为您指定了一个仅限
Text
的函数。错误是由于未启用OverloadedStrings
而导致的。下面是一个真正的模糊示例,它将受益于default
声明。在GHCi中检查这个,显示
:t some
是Text
。如果没有default
声明,:t some
就是[Char]
(即String
)。kcugc4gi2#
只需启用
OverloadedStrings
扩展名,这可以通过将{-# LANGUAGE OverloadedStrings #-}
添加到文件的顶部来完成。这将自动选择适当的“字符串”类型。