我想做类似的事情:(在伪代码中;这不会编译)
type Num a => Vector2d = (a,a)
Run Code Online (Sandbox Code Playgroud)
或者可能
type Num a => Vector2d a = (a,a)
Run Code Online (Sandbox Code Playgroud)
但我不能这样做.
阅读后,我有一种感觉,要实现这一点,我需要RankNTypes扩展名或forall关键字,但我无法围绕这个...
有人可以帮忙吗?
编辑:我管理,而是"猜测语法":解决方案是,确实RankNTypes:
type Vec = forall a. Num a => (a,a)
Run Code Online (Sandbox Code Playgroud)
这有效,但RankNTypes扩展
type Vec = Num a => (a,a)
Run Code Online (Sandbox Code Playgroud)
同样有效.有什么区别,Num a =>看起来很自然的约束如何与n级类型相关?
所以问题仍然存在,但我正在寻找解释,而不是解决方案.
haskell ×1