我在定义下面定义的异构列表的Show实例时遇到问题:
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeInType #-}
{-# LANGUAGE FlexibleInstances #-}
import Data.Kind
data HList xs where
HNil :: HList TNil
(::^) :: a -> HList as -> HList (a :^ as)
data TypeList = TNil | (:^) Type TypeList
instance Show (HList TNil) where
show HNil = "[]"
Run Code Online (Sandbox Code Playgroud)
如果Typelist xs中的所有类型都有Show Instance,我想给HList xs一个show实例.我想一个人应该能写出类似的东西
instance (Show a, _) => Show (HList a :^ as) where
show (x ::^ xs) = show x ++ show xs …Run Code Online (Sandbox Code Playgroud) 我意识到我的文本中的重音转换为 .我将其归结为以下示例,该示例写入(并覆盖)文件test.txt.
它只使用Data.Text中的方法,它们应该处理unicode文本.我检查了源文件和输出文件都是用utf8编码的.
{-# LANGUAGE OverloadedStrings #-}
import Prelude hiding (writeFile)
import Data.Text
import Data.Text.IO
someText :: Text
someText = "Université"
main :: IO ()
main = do
writeFile "test.txt" someText
Run Code Online (Sandbox Code Playgroud)
运行代码后,test.txt包含:Universit .在ghci中,我得到以下内容
*Main> someText
"Universit\233"
Run Code Online (Sandbox Code Playgroud)
这已编码不正确吗?我还在https://hackage.haskell.org/package/text-1.2.2.2/docs/Data-Text.html中找到了对 的评论 ,但我仍然不知道如何纠正上面的例子.
如何在OverloadedString中使用重音并正确地将它们写入文件?