[英]How can I install a recent version of the Haskell GHC compiler on Ubuntu?
[英]How could I remove the “if … then … else …” keywords in Haskell (GHC)?
我想删除if ... then ... else ...
关键字,因为我在Haskell中嵌入了一个语言/ DSL。 if
, then
和else
在许多领域传达了很多意义,如果我能重新定义(或保留它们未定义)它们以反映语言/领域的本质,那将是很好的。
我在Google和stackoverflow上搜索过,但一无所获。 (我确实找到了一个旧线程,为什么if ... then ... else ...
被包含在Haskell中作为关键字。)
我的IDE在Leksah中,如果可以删除关键字,那么设置将if ... then ... else ...
关键字更改回正常的font / color / unbold也会很不错。
我已经尝试过的命名约定if'
对if
等。 它感觉不太好,特别是当我想定义if
和if'
,必须定义if'
和if''
,或者if1
和if2
。 两者的存在, 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.