每当我有一个运算符部分,其左参数部分应用时,即:
(0 >)
Run Code Online (Sandbox Code Playgroud)
我只是简单地将运算符重写为前缀形式并继续计算:
(>) 0
Run Code Online (Sandbox Code Playgroud)
如何计算部分应用了正确参数的运算符部分的类型?
对于(>),这并不重要,因为两个参数具有相同的类型。Ord a => a从 中删除其中一个Ord a => a -> a -> Bool,就剩下Ord a => a -> Bool。
一般来说,您只需删除与所应用的参数对应的类型即可。例如,给定(??) :: Int -> Char -> Bool,
-- with the Int argument supplied, you still need a Char
(x ??) == (\y -> x ?? y) :: Char -> Bool
-- with the Char argument supplied, you still need an Int
(?? y) == (\x -> x ?? y) :: Int -> Bool
Run Code Online (Sandbox Code Playgroud)