我想删除if ... then ... else ...
个关键字,因为我在Haskell中嵌入了一个语言/ DSL。 if
,then
和else
在许多领域传达了很多意义,如果我能重新定义(或保留它们未定义)它们以反映语言的本质,那将是很好的/域。
我搜索了Google和stackoverflow,但一无所获。 (我确实在Haskell中找到了if ... then ... else ...
作为关键字包含的原因。)
我的IDE位于Leksah,如果可以删除关键字,那么设置将if ... then ... else ...
关键字更改回正常字体/颜色/解包方式也会很不错。
我已经为if'
尝试了if
的命名约定,依此类推。它并非感觉一样好,特别是当我想定义if
和if'
时,必须定义if'
和if''
,或if1
和if2
。 if'
和if
的存在也可能令人困惑。 (由于DSL的用户是Haskell程序员,在我的情况下,这种混乱并不严重,但我认为它可以在其他情况下提供帮助。)
总结迄今为止的回应:
RebindableSyntax
扩展名。不像删除关键字那样通用:保留Haskell的if-then-else的语法。 (Frerich Raabe)data Conditional b a = If b (Then a) (Else a)
使用非常相似的字/名称(仅适用于某些情况)。 (C. A. McCann)如果RebindableSyntax
是一个相对较新的功能,那么它不太可能找到更通用的方式,至少在下一版GHC之前是这样。
答案 0 :(得分:30)
GHC的RebindableSyntax扩展名允许您使用自己的版本重载if ... then ... else
个表达式。特别是,ifThenElse
函数用于定义替代含义。 if e1 then e2 else e3"
表示ifThenElse e1 e2 e3
。
请参阅博客文章Rebindable if..then..else expressions,详细讨论此功能,包括一些示例。
答案 1 :(得分:11)
您无法删除现有关键字。正如所指出的那样,您可以使用RebindableSyntax,但这可能不会达到您想要的效果。
接近删除关键字的唯一方法是打开CPP选项并执行类似
的操作#define if if_
#define then then_
#define else else_
然后预处理器将if / then / else扩展为if_ / then_ / else _。
答案 2 :(得分:0)
怎么样:
cond True t _ = t
cond False _ f = f