我明白了forall
使我们能够编写多态函数。
据此chapter ,我们一般写的正规函数都是Rank 1类型。这个函数属于 Rank 2 类型:
foo :: (forall a. a -> a) -> (Char,Bool)
foo f = (f 'c', f True)
它是这样解释的:
In general, a rank-n type is a function that has at least one rank-(n-1) argument but no arguments of even higher rank.
rank 参数实际上是什么意思?
有人可以举一个类似于上面的 Rank 3 类型的示例
foo
功能。
最佳答案
Rank 是根据类型的结构归纳定义的:
rank (forall a. T) = max 1 (rank T)
rank (T -> U) = max (if rank T = 0 then 0 else rank T + 1) (rank U)
rank (a) = 0
请注意它如何在箭头左侧增加一。所以:
Rank 0: Int
Rank 1: forall a. a -> Int
Rank 2: (forall a. a -> Int) -> Int
Rank 3: ((forall a. a -> Int) -> Int) -> Int
等等。
关于haskell - RankNTypes 中的 "n"是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22362196/