Haskell:打印TextEncoding
Haskell新手在这里。
$ ghc --version The Glorious Glasgow Haskell Compilation System, version 6.12.1
当试图在第三方Haskell程序中调试与奇怪的语言环境相关的错误时,我试图打印默认编码:
import System.IO
main = do
print localeEncoding
但它失败了:
$ ghc -o printlocale main.hs main.hs:4:2: No instance for (Show TextEncoding) arising from a use of `print' at main.hs:4:2-21 Possible fix: add an instance declaration for (Show TextEncoding) In the expression: print localeEncoding In the expression: do { print localeEncoding } In the definition of `main': main = do { print localeEncoding }
我的google-fu让我失望。 我错过了什么?
要在Haskell中打印某种类型的值,该类型必须是Show类的一个实例。
localeEncoding :: TextEncoding
而TextEncoding不是Show的一个实例。
TextEncoding类型实际上是存储用于编码和解码的方法的存在类型:
data TextEncoding
= forall dstate estate . TextEncoding {
mkTextDecoder :: IO (TextDecoder dstate),
mkTextEncoder :: IO (TextEncoder estate)
}
由于这些都是功能,所以没有明智的方法来展示它们。 当前的localeEncoding是使用iconv通过C函数nl_langinfo确定的。
所以,TextEncoding本身不是一个可显示的类型,所以你不能打印它。 但是,您可以通过mkTextEncoding构造此类型的新值。 例如创建一个utf8环境:
mkTextEncoding "UTF-8"
我们可能会考虑使用TextEncoding来存储语言环境表示的功能请求,因此可以打印此标签。 但是,目前这是不可能的。
链接地址: http://www.djcxy.com/p/33213.html