{-#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