在Haskell中用“?”替换“->”,用“?”替换“=>”等等

网上有很多有趣的haskell片段。这篇文章可以在这个(很棒的)堆栈溢出问题下找到。作者写道:

discount ? Floating ? ? ? ? ? ? ? ? ?
discount ? df x = x * (1 + df) ** (-?)

那些花哨的箭头和点只是让在线页面看起来更好的一种方式,还是有一个实际的 Haskell 扩展(或其他什么,我不太了解术语)可以编译这样的东西?我应该注意到,->代码中也使用了通常的。

我有一种强烈的感觉,这不是我第一次看到这样的事情。

回答

有一个 GHC 扩展称为UnicodeSyntax允许某些语法的一些Unicode 替代方案。但是,一般来说,Haskell 源代码是用 Unicode 编写的,因此即使没有任何扩展名,也可以在普通的 Haskell 源代码中使用非 ASCII 字符作为标识符和运算符。

在问题中包含的代码片段中,作者同时使用了这两种工具。他们使用UnicodeSyntax允许Unicode字符???代替内置的::=>->语法,但他们使用的书写正规Haskell的Unicode支持??标识符。

以下程序在没有任何扩展的情况下有效:

discount :: Floating ? => ? -> ? -> ? -> ?
discount ? df x = x * (1 + df) ** (-?)

  • Yes, greek letters or infix symbols like `a⚡b = a*2 + b` work without any extension. I personally use `-XUnicodeSyntax` exclusively for being able to write `∀` instead of `forall`. OTOH, the `→` and `⇒` symbols only make type signatures _less_ readable than with `->` and `=>`, in my opinion.

回答

从 GHC 文档:

语言扩展UnicodeSyntax允许使用 Unicode 字符来代表某些 ASCII 字符序列。


以上是在Haskell中用“?”替换“->”,用“?”替换“=>”等等的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>