有没有办法预测 Haskell 中部分应用函数的中缀函数行为?

Is there a way to predict infix function behavior for partially applied functions in Haskell?

我有两个功能--

partialSubtractionWith5 :: (Num a) => a -> a
partialSubtractionWith5 = (subtract 5)

partialSubtractionWith5' :: (Num a) => a-> a
partialSubtractionwith5' = (`subtract` 5)

调用 partialSubtractionWith5 x returns 相当于 x - 5,而调用 partialSubtractionWith5' x returns 相当于 5 - x.

Learn You a Haskell中,Lipovača 定义了以下函数--

isUpperAlphanum :: Char -> Bool
isUpperAlphanum = (`elem` ['A'..'B'])

哪个(基于我对 subtract 的实验)我认为当被称为 isUpperAlphanum 'some char':

时会表现得像这样
Prelude> ['A'..'B'] `elem` 'some char'
False

显然,事实并非如此。但为什么?有没有办法预测哪些函数在部分应用时会反转它们的参数?

没有矛盾,就是subtract = flip (-)。即

partialSubtractionWith5' x ≡ (`subtract` 5) x
                           ≡ x `subtract` 5
                           ≡ 5 - x

同样,

isUpperAlphanum '□' ≡ '□' `elem` ['A'..'B']

OTOH,

partialSubtractionWith5 x ≡ (subtract 5) x
                          ≡ (5`subtract`) x
                          ≡ 5 `subtract` x
                          ≡ x - 5