Ale*_*ysh 4 locale haskell localization ghc
Haskell新手在这里.
$ ghc --version The Glorious Glasgow Haskell Compilation System, version 6.12.1
在尝试调试第三方Haskell程序中与奇怪的与语言环境相关的错误时,我正在尝试打印默认编码:
import System.IO
main = do
print localeEncoding
Run Code Online (Sandbox Code Playgroud)
但它失败了:
$ 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
Run Code Online (Sandbox Code Playgroud)
和TextEncoding不是Show的实例.
TextEncoding类型实际上是存储编码和解码方法的存在类型:
data TextEncoding
= forall dstate estate . TextEncoding {
mkTextDecoder :: IO (TextDecoder dstate),
mkTextEncoder :: IO (TextEncoder estate)
}
Run Code Online (Sandbox Code Playgroud)
由于这些是功能,因此没有明智的方式来展示它们.当前的localeEncoding是使用iconv通过C函数nl_langinfo确定的.
因此,TextEncoding本身不是可显示的类型,因此您无法打印它.但是,您可以通过mkTextEncoding构造此类型的新值.例如,创建一个utf8环境:
mkTextEncoding "UTF-8"
Run Code Online (Sandbox Code Playgroud)
我们可能会考虑使用TextEncoding存储区域设置表示的功能请求,因此可以打印此标签.但是,目前这是不可能的.
归档时间: |
|
查看次数: |
377 次 |
最近记录: |