5

我正在查看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 更喜欢显式而不是使用部分函数?
  • 如何在不明确的情况下组合两个不同类型的函数,例如在示例中?
4

0 回答 0