{-#语言CPP#-}
模块 GF.系统。慰问(
    --**控制台IO
    --***更改控制台IO使用的字符编码
    设置控制台编码,更改控制台编码,
    --***控制台颜色
    Term颜色(..),获取Term颜色
) 哪里
进口 系统。IO(输入输出)
进口 控制。莫纳德(警卫)
进口 控制。莫纳德。变速箱(莫纳迪奥(..))#ifdef明w32_HOST_OS进口 系统。Win32.控制台
进口 系统。Win32.NLS#其他进口 系统。慰问。Terminfo公司#结尾
--|设置控制台编码(对于Windows,对类Unix系统没有影响)
setConsoleEncoding::IO()setConsoleEncoding(设置控制台编码) =#ifdef明w32_HOST_OS     代码页 <- 获取ACP
       设置CP 代码页
       设置编码 (“CP”++显示 代码页)#结尾       ()->IO()对于所有(m::*->*)a.Monad m=>a->ma返回 () :: IO(输入输出) ()

changeConsoleEncoding::String->IO()更改控制台编码 字符串代码 =
    #ifdef明w32_HOST_OS       也许 吧 (返回 ()) 设置CP (读取CP 代码)#结尾       字符串->IO()设置编码 字符串代码

setEncoding::String->IO()设置编码 字符串代码 =
     文本编码电子控制 <- 字符串->IO文本编码mk文本编码 字符串代码
       句柄->文本编码->IO()hSet编码 把手标准输入  文本编码电子控制
       句柄->文本编码->IO()hSet编码 把手标准输出 文本编码电子控制
       句柄->文本编码->IO()hSet编码 把手标准错误 文本编码电子控制#ifdef明w32_HOST_OS设置CP 代码页 =
     设置控制台CP 代码页
       设置控制台输出CP 代码页

读取CP 代码 =
       案例 代码 属于
         “C”:“P”:c(c) -> 案例 读取 c(c) 属于
                        [(内容提供商,"")] -> 只是 内容提供商
                        _         -> 没有什么
         “UTF-8”   -> 只是 65001
         _         -> 没有什么#结束语
数据 Term颜色 = Term颜色 { TermColors->字符串红色Fg,TermColors->字符串蓝色Fg,TermColors->字符串恢复 :: 字符串 } 衍生 Int->TermColors->显示[TermColors]->显示STermColors->字符串(Int->TermColors->ShowS)->(TermColors->字符串)->([术语颜色]->显示)->显示术语颜色对于所有a。(Int->a->ShowS)->(a->String)->([a]->ShowS)->显示showList::[TermColors]->显示$cshowList::[TermColors]->显示显示::TermColors->String$cs显示::TermColors->StringshowsPrec::Int->TermColors->ShowS$cshowsPrec::Int->术语颜色->ShowS显示
无Term颜色::Term颜色无术语颜色 = 字符串->字符串->字符串->TermColorsTerm颜色 字符串"" 字符串"" 字符串""

获取Term颜色 :: 莫纳迪奥  =>  Term颜色#ifdef明w32_HOST_OS获取Term颜色 = 返回 无术语颜色#其他getTerm颜色::m Term颜色获取Term颜色 =
    IO TermColors->m TermColor(IO术语颜色->m术语颜色)对于所有(m::*->*)a.MonadIO m=>IO a->ma提升(liftIO) (IO TermColors->m TermColor)->IO TermColors->m TermColours对于所有a b(a->b)->a->b$
     终点站学期 <- IO端子设置TermFromEnv
       术语颜色->IO术语颜色对于所有(m::*->*)a.Monad m=>a->ma返回 (TermColors->IO TermColours)->TermColor->IO Term Colors对于所有a b(a->b)->a->b$ Term颜色->(TermColors->TermColor)->可能是TermColours->Term Colors对于所有的ba.b->(a->b)->也许a->b也许 吧 Term颜色无术语颜色 TermColors->TermColor(术语颜色)对于所有a.a->a身份证件 (也许是术语颜色->术语颜色)->也许是术语颜色->术语颜色对于所有a b(a->b)->a->b$ 终端->功能TermColors->可能TermColor对于所有a.终端->能力a->可能a获取能力 终点站学期 (功能TermColors->可能是TermColor)->功能TermColors->可能TermColor对于所有a b(a->b)->a->b$
          国际n个 <- 能力Intterm颜色
            Bool->功能()对于所有(f::*->*)。备选方案f=>Bool->f()警卫 (国际n个国际->国际->布尔对于所有a.或a=>a->a->Bool>=国际8)
            颜色->字符串前景 <- 功能(颜色->字符串)对于所有s.TermStr s=>能力(颜色->s)设置前景颜色
            字符串恢复 <- 功能字符串对于所有s.TermStr s=>能力恢复默认颜色
            TermColors->功能TermColor对于所有(m::*->*)a.Monad m=>a->ma返回 (TermColors->Capability TermColor)->TermColors->功能TermColor对于所有a b(a->b)->a->b$ 字符串->字符串->字符串->TermColorsTerm颜色 (颜色->字符串前景 颜色红色) (颜色->字符串前景 颜色蓝色) 字符串恢复#结束语