问题标签 [monomorphism-restriction]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - Rigid / skolem 类型变量:作为参数很好,但使用本地 where/let 语句转义范围
每什么是 skolems?,这有效:
但是为什么不这样:
(或类似的版本let
)。它产生的错误包括:
是否可以通过添加一些类型声明来使其工作(有点像该问题s :: forall a. I a -> String
中示例的解决方案withContext
)。我觉得我想在Eq x
某个地方添加一个。
我(可能是幼稚的)对reflexive
工作原理的理解如下:
- 它需要一个 type 的值
AnyEq
。这在其中嵌入了任何类型的值,只要它是Eq
. 这种内部类型在的类型签名中并不明显,并且在编译reflexive
时是未知的。reflexive
- 该绑定生成
(AE x) = ae
了x
一个未知类型的值,但已知它是Eq
. (所以就像变量 x 和 y 一样myEq :: Eq a => a -> a -> Bool; myEq x y = x == y
) ==
基于隐含的类约束,操作员很高兴。
我想不出为什么reflexive2
不做同样的事情,除了像“单态限制”或“单局部绑定”这样的事情,有时会让事情变得很奇怪。我尝试使用 and 的所有组合进行编译NoMonomorphismRestriction
,NoMonoLocalBinds
但无济于事。
谢谢。