我正在查看GHC.Unicode
库源代码并意识到几乎所有 Haskell 内部库在大多数情况下都避免了默认编程(也称为无点样式)。简单的函数可以很容易地转换,例如:
isLatin1 :: Char -> Bool
isLatin1 c = c <= '\xff'
导致:
isLatin1 :: Char -> Bool
isLatin1 = (<= '\xff')
但是有些情况我不能应用它,比如当我有更复杂的功能时,比如:
isOctDigit c = c >= '0' && c <= '7'
很难推断出一种组合操作的方法。我不是要进入范围,我的意思是仅仅通过组合函数来做多个操作。以下:
isOctDigit = (>= '0') && (<= '7')
无效,并且由于返回类型不同,(>= '0') . (<= '7')
显然也不会发生。
考虑到这些观察,我有以下问题:
- 我什么时候应该使用无点编程而不是显式编程?
- 为什么 GHC 更喜欢显式而不是使用部分函数?
- 如何在不明确的情况下组合两个不同类型的函数,例如在示例中?