繁体   English   中英

我怎样才能删除Haskell(GHC)中的“if ... then ... else ...”关键字?

[英]How could I remove the “if … then … else …” keywords in Haskell (GHC)?

我想删除if ... then ... else ...关键字,因为我在Haskell中嵌入了一个语言/ DSL。 ifthenelse在许多领域传达了很多意义,如果我能重新定义(或保留它们未定义)它们以反映语言/领域的本质,那将是很好的。

我在Google和stackoverflow上搜索过,但一无所获。 (我确实找到了一个旧线程,为什么if ... then ... else ...被包含在Haskell中作为关键字。)

我的IDE在Leksah中,如果可以删除关键字,那么设置将if ... then ... else ...关键字更改回正常的font / color / unbold也会很不错。


我已经尝试过的命名约定if'if等。 感觉不太好,特别是当我想定义ifif' ,必须定义if'if'' ,或者if1if2 两者的存在, if'if也可能混淆。 (由于DSL的用户是Haskell程序员,在我的情况下,这种混乱并不是一个严重的问题,但我认为它可以在其他情况下提供帮助)。


总结迄今为止的回复:

  • 使用RebindableSyntax扩展名来GHC。 不像删除关键字那样通用:保留Haskell的if-then-else的语法。 (Frerich Raabe)
  • 解决方法:使用非常相似的单词/名称,使用data Conditional ba = If b (Then a) (Else a) (仅适用于某些上下文)。 (CA McCann)

如果RebindableSyntax是一个相对较新的特性,那么它不太可能找到更通用的方式,至少在下一版GHC之前是这样。

GHC的RebindableSyntax扩展允许你使用自己的版本重载if ... then ... else表达式。 特别是, ifThenElse函数用于定义替代含义。 if e1 then e2 else e3"表示ifThenElse e1 e2 e3

有关此功能的详细讨论,请参阅博客文章Rebindable if..then..else表达式 ,包括一些示例。

您无法删除现有关键字。 正如所指出的,你可以使用RebindableSyntax,但这可能不会做你想要的。

接近删除关键字的唯一方法是打开CPP选项并执行类似的操作

#define if if_
#define then then_
#define else else_

然后,预处理器将if / then / else扩展为if_ / then_ / else_。

怎么样:

cond True  t _ = t
cond False _ f = f

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM