我知道id的等级为1,rank3的等级为3.但是,我不确定是否有一些公式来计算等级。对于函数的顺序,我们有:
order(c) = 0
order(A -> B) = max(order(A)+1, order(B))
rank1 :: forall a. a -> a
rank2 :: (forall a. a -> a) -> (b -> b)
rank3 :: ((forall a. a -> a) -> (Bool, Char)) -> (Char, Bool)
似乎等级取决于类型签名中“forall”的“深度”,但这对我来说还不够明显。我有以下问题:
undefined :: forall a. a
的排名是多少?它是0还是1?f :: ((a -> a) -> (forall a. a -> a)) -> (forall b. b -> b)
的排名是多少? 2?