Din*_*uek 16 haskell ghc leksah
我想删除if ... then ... else ...关键字,因为我在Haskell中嵌入了一个语言/ DSL.if,then并else传达了很多的意思在许多领域,这将是巨大的,如果我能重新定义(或保留未定义)它们以反映语言/域的性质.
我在Google和stackoverflow上搜索过,但一无所获.(我确实找到了一个旧线程,为什么if ... then ... else ...在Haskell中包含了关键字.)
我的IDE在Leksah中,并且,如果可以删除关键字,那么设置将if ... then ... else ...关键字更改回正常的字体/颜色/解包也是很好的.
我已经尝试过if'for 的命名约定if等等.它感觉不太好,特别是当我想定义if和if',并且必须定义if',if''而不是,if1和if2.两者的存在if',并if还可能会造成混乱.(由于DSL的用户是Haskell程序员,在我的情况下,这种混乱并不是一个严重的问题,但我认为它可以在其他情况下提供帮助).
总结迄今为止的回复:
RebindableSyntaxGHC 的扩展名.不像删除关键字那样通用:保留Haskell的if-then-else的语法.(Frerich Raabe)data Conditional b a = If b (Then a) (Else a)(仅适用于某些上下文).(CA McCann)如果RebindableSyntax是一个相对较新的特征,那么它不太可能找到更通用的方式,至少在下一版GHC之前是这样.
Fre*_*abe 30
GHC 的RebindableSyntax扩展允许您if ... then ... else使用自己的版本重载表达式.特别是,该ifThenElse函数用于定义替代含义.if e1 then e2 else e3"手段ifThenElse e1 e2 e3.
有关此功能的详细讨论,请参阅博客文章Rebindable if..then..else表达式,包括一些示例.
aug*_*tss 11
您无法删除现有关键字.正如所指出的,你可以使用RebindableSyntax,但这可能不会做你想要的.
接近删除关键字的唯一方法是打开CPP选项并执行类似的操作
#define if if_
#define then then_
#define else else_
Run Code Online (Sandbox Code Playgroud)
然后,预处理器将if/then/else扩展为if_/then_/else_.
| 归档时间: |
|
| 查看次数: |
1347 次 |
| 最近记录: |