有没有办法预测 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
我有两个功能--
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