向量空间库和约束标量类型

时间:2013-11-10 20:09:29

标签: haskell types

我正在开发一个使用vector-space库的程序,我在使用它时遇到了一些麻烦。 请参阅下面的代码。

import Data.VectorSpace
-- scale a vector with a float
step :: (VectorSpace a) => a -> Float -> a
step x dt = x ^* dt

编译此代码段时,我得到有关矢量类型类的关联标量类型的错误。

Could not deduce (Scalar a ~ Float)
from the context (VectorSpace a)
  bound by the type signature for
        step :: VectorSpace a => a -> Float -> a
  at Test.hs:5:9-42 
In the expression: x ^* dt
In an equation for `step': step x dt = x ^* dt

是否有类型签名可以修复此编译器错误?或者是否有更好的库用于描述我正在寻找的类型(如添加和缩放)操作?最后,我希望像使用代码一样使用代码。

step (1,1) 0.5
step 1 0.5

基本上我希望重用vector-space定义的一些实例。

1 个答案:

答案 0 :(得分:3)

编辑:在hackage上发现签名不正确

您可以添加关于GHC抱怨的约束:

{-# LANGUAGE GADTs #-}
import Data.VectorSpace

step :: (VectorSpace a, Scalar a ~ Float) => a -> Float -> a
step x dt = x ^* dt