Haskell新手在这里。我从type classes知道=>
表示"在"的上下文中。但是,我无法阅读模块Statistics.Sample
(Vector v (Double, Double), Vector v Double) => v (Double, Double) -> Double
v
左侧的=>
会有哪些约束?
答案 0 :(得分:10)
Data.Vector.Generic.Vector
类型类有两个类型参数v
和a
,其中v :: * -> *
是容器的类型,a :: *
是元素的类型在容器中。这只是vector
包中定义的矢量类型的通用接口,特别是Data.Vector.Unboxed.Vector
。
这实际上是说类型v
必须能够容纳(Double, Double)
和Double
,但不能同时执行。如果您使用v ~ Data.Vector.Unboxed.Vector
,那么这很好用。原因是correlation
的实施,使用。此功能会将v (a, b)
拆分为(v a, v b)
。由于correlation
正在使用v (Double, Double)
,因此需要v
可以容纳Double
的附加约束。
此泛型类型旨在使correlation
函数的工作类型多于Data.Vector.Vector
,包括可能在其他库中实现的任何矢量样式类型。
我想强调这些约束
Data.Vector.Generic.Vector v (Double, Double)
Data.Vector.Generic.Vector v Double
说明您为v
选择的任何类型都能够保留(Double, Double)
并且还能够保留Double
。这为您的矢量类型指定了某些先决条件,而不是矢量的实际内容。向量的实际内容在correlation
函数的第一个参数中指定。