为什么GHC避免默认编程?

Mar*_*rgo 5 haskell tacit-programming

我正在查看GHC.Unicode库源并意识到几乎所有的Haskell内部库大多数时候都避免了默认编程(也称为无点样式).简单的功能可以轻松转换,例如:

isLatin1 :: Char -> Bool
isLatin1 c = c <= '\xff'
Run Code Online (Sandbox Code Playgroud)

导致:

isLatin1 :: Char -> Bool
isLatin1 = (<= '\xff')
Run Code Online (Sandbox Code Playgroud)

但有些情况下我无法应用它,例如当我有更复杂的功能时,例如:

isOctDigit c =  c >= '0' && c <= '7'
Run Code Online (Sandbox Code Playgroud)

难以推断出构成操作的方法.我并不是指进入范围,我的意思是仅通过编写函数来执行多个操作.下列:

isOctDigit = (>= '0') && (<= '7')
Run Code Online (Sandbox Code Playgroud)

是无效的,也因为不同的退货类型也(>= '0') . (<= '7') 显然不可能发生.

考虑到这些观察结果,我有以下问题:

  • 什么时候应该使用无点编程而不是显式呢?
  • 为什么GHC更喜欢显式而不是使用部分功能?
  • 如何在不明确的情况下组合不同类型的两个函数,例如在示例中?