- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
1) 有没有办法输入这个? 2)谁能解释一下这些错误消息?
let identity1: 'a => 'a = [%bs.raw {|
function(value) {
return value
}
|}];
/*
Line 2, 11: The type of this expression, '_a -> '_a, contains type variables that cannot be generalized
*/
let identity2: 'a. 'a => 'a = [%bs.raw {|
function(value) {
return value
}
|}];
/*
Line 8, 11: This definition has type 'a -> 'a which is less general than 'a0. 'a0 -> 'a0
*/
最佳答案
bs.raw
是有效的(准确地说是扩展的),因此它受到值的限制: http://caml.inria.fr/pub/docs/manual-ocaml/polymorphism.html#sec51 .
简而言之,函数应用的结果类型不能被泛化,因为它可能捕获了一些隐藏的引用。例如,考虑以下函数:
let fake_id () = let store = ref None in fun y ->
match !store with
| None -> y
| Some x -> store := Some x; y
let not_id = fake_id ()
let x = not_id 3
那么下一次应用not_id
将是3
。因此not_id
的类型不能是∀'a。 'a -> 'a
。这就是为什么类型检查器会为您的函数推断类型 '_weak1 -> '_weak1
(使用 4.06 表示法)。此类型 _weak1
不是多态类型,而是未知具体类型的占位符。
在正常设置中,解决方案是将 not_id
设为具有 η-expansion 的值:
let id x = fake_id () x
(* or *)
let id: 'a. 'a -> 'a = fun x -> fake_id () x
关于ocaml - 无法输入多态 [%bs.raw 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49351781/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!