【发布时间】:2021-10-05 11:57:19
【问题描述】:
使用来自here的rankN:
{-# LANGUAGE RankNTypes #-}
rankN :: (forall n. Num n => n -> n) -> (Int, Double)
rankN f = (f 1, f 1.0)
为什么不能map rankN [negate]?有没有办法让它成为可能?
我想我现在(大部分)理解了 RankNTypes,并且我可以同时做到 rankN (+1) 和 rankN negate。
(为什么map rankN [negate] 会给出一个奇怪的错误Couldn't match type ‘n’ with ‘Integer’,而我认为没有涉及任何Integers?)
另外,我刚刚检查了:t map rankN。它给了可怕的Couldn't match type ‘a’ with ‘n -> n’ because type variable ‘n’ would escape its scope. This (rigid, skolem) type variable is bound by...。我知道在某些情况下该错误是如何产生的,但并不真正理解为什么它会在这里应用。
谢谢,如果这是一个重复,对不起。 (但我在所有其他 RankNTypes 问题中找不到答案。)
【问题讨论】:
标签: haskell rank-n-types