- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我声明这个新类型时:
newtype ListScott a =
ListScott {
unconsScott :: (a -> ListScott a -> r) -> r -> r
}
ListScott :: ((a -> ListScott a -> r) -> r -> r) -> ListScott a
,编译器提示
r
不在范围内。从类型签名中我想将一流的多态函数传递给
ListScott
不是很明显吗? ?
r
需要显式类型限定符对于这样的情况?
最佳答案
这是编程语言设计的问题。可以按照您建议的方式推断,但我认为这是一个坏主意。
Isn't it apparent from the type signature that I want to pass a first class polymorphic function to ListScott?
GADTs
写的东西扩大:
data ListScott a where
ListScott :: { unconsScott :: (a -> ListScott a -> r) -> r -> r } -> ListScott a
r
在
unconsScott
中存在量化字段,因此构造函数具有以下第一种类型:
ListScott :: forall a r. ((a -> ListScott a -> r) -> r -> r) -> ListScott a
-- as opposed to
ListScott :: forall a. (forall r. (a -> ListScott a -> r) -> r -> r) -> ListScott a
r
而是作为
ListScott
的参数,但我们只是忘了添加它?我认为这是一个合理可能的错误,因为假设
ListScott r a
和
ListScott a
可以在某些方面作为列表的表示。然后,绑定(bind)器的推断将导致错误的类型定义被接受,并且一旦类型被使用,错误就会在其他地方报告(希望不会太远,但这仍然比定义本身的错误更糟糕)。
newtype T = T { unT :: maybe int }
-- unlikely to intentionally mean "forall maybe int. maybe int"
data R a = R
{ f :: (r -> r) -> r -> r
, g :: r -> r
}
data R r a = R
{ f :: (r -> r) -> r -> r
, g :: r -> r
}
=
的左侧确定是否
r
绑定(bind)在那里,如果不是,我们必须在每个字段中插入活页夹。我发现这使得第一个版本难以阅读,因为
r
这两个字段中的变量实际上不会在同一个活页夹下,但一目了然。
class Functor f where
fmap :: (a -> b) -> f a -> f b
class Functor f where
fmap :: forall a b. (a -> b) -> f a -> f b
id :: a -> a
id :: forall a. a -> a
, 因为没有其他级别
a
可以绑定(bind)。
关于haskell - 为什么 rank-n 类型需要显式的 forall 量词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48225570/
标题和标签应充分解释问题。 最佳答案 Title and tags should explain the question adequately. 呃,不是真的。您使用了标签 existential-
以 Haskell 中简单的恒等函数为例, id :: forall a. a -> a 鉴于 Haskell 据称支持谓语多态性,我应该能够将 id“限制”为类型 (forall a.a -> a)
Ltac checkForall H := let T := type of H in match T with | forall x, ?P x => idtac | _ =
如何在 Coq 中证明 (forall x, P x/\Q x) -> (forall x, P x)?已经尝试了几个小时,但不知道如何分解 Coq 可以消化的东西的前因。 (我是新手,显然:) 最佳
是否可以编写类型的单射函数 hard :: (forall n . Maybe (f n)) -> Maybe (forall n . (f n)) 作为total functional progra
我试图理解使用 forall 量化两个类型变量和使用 forall 量化元组类型的单个类型变量之间的区别。 例如,给定以下类型系列: {-# LANGUAGE RankNTypes #-} {-# L
在证明中,我需要证明“如果 n 不是三的倍数,那么 n+n 也不是三的倍数”。我认为我的证明太长而且不是很优雅。有没有更漂亮的写法?有没有ssreflect? (我确定 ssreflect 中有一个
从我收集到的有关 agda 的零碎信息中,我(显然是错误地)得出的结论是 ∀ {A}相当于 {A : Set} .现在我注意到 flip : ∀ {A B C} -> (A -> B -> C) ->
如果我不想查看列表中的每个元素是否与另一个列表中相同索引的元素正确对应,我可以使用 forall 来执行此操作吗?例如类似的东西 val p=List(2,4,6) val q=List(1,2,3)
我尝试使用 Function 来使用度量来定义递归定义,但收到错误: Error: find_call_occs : Prod 我在底部发布了整个源代码,但我的功能是 Function kripke_
我一直在阅读existential section维基教科书中的内容如下: Firstly, forall really does mean 'for all'. One way of thinkin
从 ghc-8.0 开始,我们有一个非常好的扩展,称为 TypeApplications。这允许我们代替: λ> show (5 :: Int) "5" 这样做: λ> :set -XTypeAppl
我阅读了HaskellWiki关于数据构造函数并考虑以下内容: 2.1 Data constructors as first class values Data constructors are fi
我想证明以下定理: Theorem Frobenius (A: Set) (q: Prop) (p: A -> Prop) : (q \/ forall x : A, p x) -> (foral
我遇到了一个函数无法进行类型检查的情况,除非我在其类型签名的开头显式添加一个 forall。 有问题的功能是: test :: (Typeable a) => a -> a test x |
看来需要明确说forall在数据定义中有参数类型。例如,这 data A = A (forall s. ST s (STUArray s Int Int)) 将工作,而这 data A = A (ST
我对哈姆雷特有一个奇怪的问题。我正在尝试使用 $forall 遍历列表,但我不断收到“不在范围内”错误。我在 Win7 上运行 yesod 0.9.2.2。 除了糟糕的设计,有人知道我哪里出错了吗?删
考虑以下表: object MyTestsFactory { val testCases = Table( ("testName", "input", "output"), ("t
我正在通过阅读“Certified Programming with Dependent Types”一书来学习 Coq,但我在理解问题时遇到了问题 forall句法。 举个例子,让我们考虑一下这种相
可以使用 GADT 来表达 Existentially quantified 类型。 我看到 GADT 更通用 - data-type-extensions ,第 7.4.7 节 什么时候使用存在量化
我是一名优秀的程序员,十分优秀!