计算Haskell类型签名的等级?

时间:2014-09-05 11:24:25

标签: haskell types

我知道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”的“深度”,但这对我来说还不够明显。我有以下问题:

  1. undefined :: forall a. a的排名是多少?它是0还是1?
  2. f :: ((a -> a) -> (forall a. a -> a)) -> (forall b. b -> b)的排名是多少? 2?
  3. 是否有明确计算排名数的公式?
  4. 如果没有公式,有人可以告诉我如何明确计算排名吗?

0 个答案:

没有答案