{-#LANGUAGE重叠实例#-}
{-#LANGUAGE无法确定实例#-}

--| \“语法糖\”

模块 语言.句法. 哪里



进口 语言.句法.语法
进口 语言.句法.约束



--|通常假设@(`desugar`(`sugar`a))@具有相同的含义
--作为@a@。
 句法 
  哪里
    类型   时间: * -> *
    类型 内部 
    去糖 时间:  -> ASTF公司 ( ) (内部 )
       时间: ASTF公司 ( ) (内部 ) -> 

实例 句法 (ASTF公司 dom公司 )
  哪里
    类型  (ASTF公司 dom公司 )   = dom公司
    类型 内部 (ASTF公司 dom公司 ) = 
    去糖 = 身份证件
       = 身份证件

--|句法类型转换
复苏剂 时间: (句法 , 句法 b条,   ~  b条, 内部  ~ 内部 b条) =>  -> b条
复苏剂 =  . 去糖

--| N元语法函数
--
--“desugarN”具有任何类型的形式:
--
-->脱糖氮:
-->(句法a
-->,句法b
-- >     , ...
-->,句法x
-->,域域
-->,域b~dom
-- >     , ...
-->,域名x~dom
-->)=>(a->b->…->x)
-->->(ASTF dom(内部a)
-->->ASTF dom(内部b)
-- >          -> ...
-->->ASTF dom(内部x)
-- >          )
--
-- ...“sugarN”反之亦然。
 语法N  内部的 |  -> 内部的
  哪里
    去糖氮 时间:  -> 内部的
    糖N   时间: 内部的 -> 

实例 (句法 ,   ~ dom公司, ia公司 ~ AST公司 dom公司 (完全 (内部 ))) => 语法N  国际航空公司
  哪里
    去糖氮 = 去糖
    糖N   = 

实例
    ( 句法 
    ,   ~ dom公司
    , 国际航空公司 ~ 内部 
    , 语法N b条 国际银行
    ) =>
      语法N ( -> b条) (AST公司 dom公司 (完全 国际航空公司) -> 伊布)
  哪里
    去糖氮 (f) = 去糖氮 . (f) . 
    糖N (f)   = 糖N . (f) . 去糖



--“糖衣”符号应用程序
--
--“sugarSym”具有任何类型的形式:
--
-->sugarSym::
-->(表达式:<:AST dom
-->,句法a dom
-->,句法b dom
-- >     , ...
-->,句法x dom
-->)=>expr(内部a:->内部b:->…:->完整(内部x))
-->->(a->b->…->x)
sugarSym公司 时间: (sym(对称) :<: AST公司 dom公司, 应用Sym 信号发生器 b条 dom公司, 语法N c(c) b条) =>
    sym(对称) 信号发生器 -> c(c)
sugarSym公司 = 糖N . 应用程序Sym

--“糖衣”符号应用程序
--
--“sugarSymC”具有任何类型的形式:
--
-->sugarSymC::
-->(InjectC expr(AST dom)(内部x)
-->,句法a dom
-->,语法b dom
-- >     , ...
-->,句法x dom
-->)=>expr(内部a:->内部b:->…:->完整(内部x))
-->->(a->b->…->x)
糖SymC
    时间: ( 注入C sym(对称) (AST公司 dom公司) (拒绝结果 信号发生器)
       , 应用Sym 信号发生器 b条 dom公司
       , 语法N c(c) b条
       )
    => sym(对称) 信号发生器 -> c(c)
糖SymC = 糖N . 应用SymC