----------------------------------------------------------------------
-- |
--模块:ErrM
--维修人员:AR
--稳定性:(稳定)
--便携性:(便携)
--
-->CVS$日期:2005/04/21 16:22:00$
-->CVS$作者:bringert$
-->CVS$版本:1.5$
--
--对BNFC生成的文件进行黑客攻击。AR 21/9/2003年9月
-----------------------------------------------------------------------------

{-#语言CPP#-}
模块 GF.数据。错误消息 哪里

进口 控制。莫纳德 (MonadPlus系列(..),应用程序)
进口 控制。适用
进口 有资格的 控制。莫纳德。失败 作为 失败

--|喜欢带有错误消息的“可能”类型
数据 错误  = 好 啊  |  字符串
  衍生 (ReadPrec[错误a]ReadPrec(错误a)Int->ReadS(错误a)读取S[错误a](Int->ReadS(错误a))->读数S[Err a]->ReadPrec(错误a)->ReadPrec[错误a]->读取(错误a)for all a.读取a=>ReadPrec[Err a]对于所有a.读取a=>ReadPrec(错误a)对于所有a.读取a=>Int->读取S(Err a)对于所有a.读取a=>读取S[Err a]对于所有a。(Int->ReadS a)->ReadS[a]->ReadPrec a->ReadPrec[a]->读取readListPrec::ReadPrec[错误a]$creadListPrec::for all a.读取a=>ReadPrec[Err a]readPrec::readPrec(错误a)$creadPrec::for all a.读取a=>ReadPrec(错误a)readList::ReadS[错误a]$creadList::for all a.读取a=>读取S[Err a]readsPrec::Int->ReadS(错误a)$creadsPrec::for all a.读取a=>Int->ReadS(错误a)阅读, 内部->错误->显示[Err a]->显示错误a->字符串(内部->错误->显示)->(错误a->字符串)->([Err a]->显示S)->显示(错误a)对于所有a.显示a=>Int->Err a->ShowS对于所有a.显示a=>[Err a]->显示Sfor all a.显示a=>Err a->String对于所有a。(Int->a->ShowS)->(a->String)->([a]->ShowS)->显示showList::[Err a]->显示$cshowList::for all a.显示a=>[Err a]->显示Sshow::Err a->字符串$cs显示::for all a.显示a=>Err a->StringshowsPrec::Int->错误a->ShowS$cshowsPrec::for all a.显示a=>Int->Err-a->ShowS显示, 错误a->Err-a->Bool(Err a->Err a->Bool)->(Err a->Err a->Bool)->方程(Err a)对于所有a.方程a=>错误a->错误a->布尔对于所有a.(a->a->Bool)->(a->a->Bool)->等式a/=::错误a->错误a->布尔$c/=::对于所有a.等式a=>错误a->错误a->Bool==::错误a->Err-a->Bool$c==::对于所有a.等式a=>错误a->错误a->Bool等式)

--|“可能”的类比
错误 时间: (字符串 -> b条) -> ( -> b条) -> 错误  -> b条 
错误::(字符串->b)->(a->b)->错误a->b错误 字符串->bd日 a->b(f) 错误ae(电子) = 案例 错误ae(电子) 属于
  好 啊  -> a->b(f) 
   字符串 -> 字符串->bd日 字符串

--|类似于“fromMaybe”
来自Err 时间:  -> 错误  -> 
来自错误::a->Err-a->a来自Err  = (字符串->a)->(a->a)->错误a->a对于所有b a.(字符串->b)->(a->b)->错误a->b错误 (a->字符串->a对于所有a b.a->b->a常数 ) a->a对于所有a.a->a身份证件

实例 莫纳德 错误 哪里
  返回::a->错误a返回      = a->错误a对于所有a.a->Err a好 啊
  好 啊   >>=::错误a->(a->错误b)->错误b>>= a->错误b(f) = a->错误b(f) 
   字符串 >>= a->错误b(f) = 字符串->错误b对于所有a.字符串->错误a 字符串#如果!(最小版本基础(4,13,0))  --将在GHC 8.8中删除Monad(失败)+
  失败 = 失败。失败#结尾
实例 失败。Monad失败 错误 哪里
  失败::字符串->错误a失败        = 字符串->错误a对于所有a.字符串->错误a



--|由PEB于2003年2月10日添加
实例 Functor(仿真器) 错误 哪里
  fmap::(a->b)->错误a->Err b功能性维修计划 a->b(f) (好 啊 ) = b->错误b对于所有a.a->Err a好 啊 (a->b(f) )
  功能性维修计划 a->b(f) ( 字符串) = 字符串->错误b对于所有a.字符串->错误a 字符串

实例 适用 错误 哪里
  纯::a->错误a纯净的 = a->错误a对于所有(m::*->*)a.Monad m=>a->ma返回
  :错误(a->b)->错误a->Err b(<*>) = 错误(a->b)->错误a->Err b对于所有(m::*->*)a b.单体m=>m(a->b)->m a->m b应用程序

--|由KJ添加
实例 MonadPlus系列 错误 哪里
    mzero::错误amzero(零点) = 字符串->错误a对于所有a.字符串->错误a 字符串“错误(未给出原因)”
    mplus::Err a->Err a->Err amplus(mplus) (好 啊 )  错误a_ = a->错误a对于所有a.a->Err a好 啊 
    mplus(mplus) ( 字符串) 错误ab条 = 错误ab条

实例 备选方案 错误 哪里
    空::错误a空的 = 错误a对于所有(m::*->*)a.MonadPlus m=>m amzero(零点)
    <|>::Err a->Err a->Err a(<|>) = 错误a->Err-a->Err a对于所有(m::*->*)a.MonadPlus m=>ma->ma->mamplus(mplus)