问题描述
较高的排名类型看起来非常有趣。这个例子来自: foo ::(forall a。a - > a) - >(Char,Bool)
foo f =(f'c',f True)
现在我们可以在没有编译器爆炸的情况下评估 foo id
。这个例子在本书中被我在其他一些地方看到的真实世界的例子迅速地追踪到:ST monad和 runST
。这很酷。
但是我还没有遇到这样一种情况,我通过编写自己的函数来解决一个问题,并且使用更高级的参数。你有吗?你有什么样的例子在野外有2级或n级多态性吗?
看看像 Higher rank types look like great fun. From the Haskell wikibook comes this example: Now we can evaluate But I have yet to come across a situation where I solve a problem by writing my own function with an argument of higher-rank. Have you? What examples do you have of rank-2 or rank-n polymorphism in the wild? Take a look at functions like Darcs has support for multiple repository formats, and that support is expressed via a typeclass. So you can write code that is generic over repository formats. When actually reading an on-disk repository you want to dispatch to that code through some common code that figures out what format the repository is in and chooses the right typeclass instantiation. 这篇关于你在Haskell中找到更高级的类型有什么用处?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! withRepoLock
在 foo :: (forall a. a -> a) -> (Char,Bool)
foo f = (f 'c', f True)
foo id
without the compiler exploding. This example is quickly followed in the book by the real-world example I have seen in a few other places: the ST monad and runST
. That's pretty cool.withRepoLock
in the Darcs source.