哪种 KeyBoard / KeyBoard Layout 最适合 Haskell 编程? haskell 是不是将所有数学符号作为函数?

Posted

技术标签:

【中文标题】哪种 KeyBoard / KeyBoard Layout 最适合 Haskell 编程? haskell 是不是将所有数学符号作为函数?【英文标题】:Which KeyBoard / KeyBoard Layout will be most suitable for haskell programming? Does haskell has all Math Symbols as functions?哪种 KeyBoard / KeyBoard Layout 最适合 Haskell 编程? haskell 是否将所有数学符号作为函数? 【发布时间】:2012-07-20 18:52:42 【问题描述】:

作为haskell 的绝对初学者,我不断地阅读关于haskell 的各种文章、pdf 和教程。大多数示例/示例代码都包含数学字符。即使是普通的打字任务

->

我必须输入:- & >

事实是我不知道如何在 emacs 中输入数学字符(我用于练习 haskell 编码)。我当前的键盘布局是“美国英语”。

是否有任何特定的键盘或键盘布局最适合输入数学符号(用于 haskell 编程)?

haskell 是否将所有数学符号作为函数?我目前的假设是,haskell 必须支持所有数学符号作为函数。

例如+、-、/、*等。

Unicode Math Symbols 注意:这些符号出现在许多 haskell 论文中。

【问题讨论】:

我不确定到底是什么困难。如果 → 字符不方便输入,那么 -> 应该也能正常工作。由于 - 和 > 都可以在美式键盘上找到(其中一个被移动),因此可以在任何编辑器中键入 -> 只需三个击键。您是在问是否有一个键盘可以让您键入 → 或 -> 只需一两次击键? 另外,what 支持所有数学符号吗? 许多论文是使用 lhs2TeX 工具排版的 - andres-loeh.de/lhs2tex - 当打印在论文中时,代码示例本身并不是有效的 Haskell 语法(lhs2TeX 是一个预处理器)。您当然不需要扩展键盘。如果你必须在代码中包含它们,那么 Roel van Dijk 有一个关于 Unicode 符号的 Hackage 包。 【参考方案1】:

你不必使用你在论文中看到的花哨的 unicode 符号——代替 → 你可以为每个特殊字符写 -> 等等。鉴于此,Haskell 完美地找到了正常的美国 Qwerty 布局。

但是,如果您发现 → 样式更易于阅读(但显然 更易于键入),您可以让 Emacs 显示带有这些符号的代码。这完全是装饰性的,就像语法高亮一样:即使您看到 →,源代码仍然有 ->,这仍然是您键入的内容。您可以这样启用它:

(setq haskell-font-lock-symbols t)

这种符号模式可能会让你的一些缩进看起来有点奇怪。但是,我已经使用了一段时间,并且完全没有问题。当我的代码使用漂亮的符号代替 ASCII 代理时,我当然更喜欢查看我的代码。

所以你仍然键入 -> 但它看起来更漂亮。

但是,有时您确实想要像希腊字母这样的花哨符号。例如,如果您正在实现论文中的算法,则保持变量名称相同可能是有意义的。为此,您可以通过C-\ 并输入TeX 使用Emacs 的TeX 输入模式。例如,这将允许您输入\lambda 并获得λ。要查看您可以键入的符号的完整列表,请运行 M-x describe-input-method,然后输入 TeX

最后:Haskell 确实支持所有“数学符号”,如 + 和 - 作为运算符。事实上,任何由这些字符组成的标识符都是自动中缀的。因此,您实际上可以定义自己的运算符。你可以这样写:

a +++ b = a * a + b * b

然后您就可以在中缀位置使用+++ 函数,就像任何其他运算符一样。我相信 Haskell 通过查看其 Unicode 类别来确定哪些字符是“运算符字符”,这意味着您可以定义(我实际上已经定义)运算符,例如 ×

总而言之:Haskell 代码不需要任何特殊符号——它都可以是 ASCII。如果您发现这些符号易于阅读,您可以让 Emacs 使用这些符号来渲染 ASCII Haskell 代码,并且您实际上可以使用 TeX 输入模式键入它们。

【讨论】:

【参考方案2】:

大多数 Haskell 代码仅使用标准的 ASCII 字符集,尽管运算符和函数名称支持 Unicode(并且 GHC 支持将 Unicode 用于语法保留标记,例如将 用于 -> 用于::,与-XUnicodeSyntax)。引用the Haskell 2010 report:

Haskell 使用 Unicode [2] 字符集。然而,源程序目前偏向于 Haskell 早期版本中使用的 ASCII 字符集。

所以我通常会输入 -> 来获取箭头。您在论文中找到的“美化”语法通常不会在实际代码中使用,至少在我的经验中(但我承认我在 Haskell 代码中没有被广泛阅读)。例如,在论文中,the ++ operator for appending lists 有时排版时两个加号重叠,而我看到the <*> operator for applicative functors 排版为,一个带圆圈的星号运算符。但我从未在实际的 Haskell 代码中看到过(前者甚至不是真正的角色),而且它们也没有在基础库中定义。您经常在论文中看到 代替->,而-XUnicodeSyntax 支持这一点;但同样,我从未在实际代码中看到过这种情况,尽管我不会那么惊讶。

据我所知,没有任何键盘布局真正支持所有 Unicode,甚至只支持数学符号(除了支持输入原始十六进制代码)。但是,编辑器的输入模式可能很方便。例如,RFC 1345,它为各种有用的字符定义了两个字符序列,并且可以在 Emacs 中使用 C-\ 并选择 @ 来启用 eg 987654340@。另一个例子是the mode that Emacs uses for editing Agda (a dependently typed programming language),其中 LaTeX(ish) 转义被翻译成 Unicode 字符。

简而言之,最合适的键盘布局就是您最熟悉的键盘布局。 Haskell 的字符用法没有什么特别之处,因此需要做一些不同的事情。

【讨论】:

【参考方案3】:

我知道 programming 有一种 Dvorak 风格,但似乎学习新的键盘布局比简单地为你必须敲击的新组合键建立肌肉记忆更难。

【讨论】:

以上是关于哪种 KeyBoard / KeyBoard Layout 最适合 Haskell 编程? haskell 是不是将所有数学符号作为函数?的主要内容,如果未能解决你的问题,请参考以下文章

Keyboard Hook API函数 参数说明

Keyboard Row

[转]UiPath Keyboard Shortcuts

SetWindowsHookEx WH_KEYBOARD_LL 问题锁屏

解释 SetWindowsHookEx / WH_KEYBOARD_LL 的正确逻辑

3.Keyboard Row