包装Data.Vec类型

时间:2015-07-07 07:20:56

标签: haskell types

我想在我自己的类型中包含一些Data.Vec类型,但它似乎不起作用。例如,我想拥有自己的Vec3 Vec3F,所以我做了类似的事情:

types.h中

module Types
( Vec3(..)
) where

import qualified Data.Vec as V

type Vec3 = V.Vec3 Float 

Main.hs

import Types

vect :: Vec3
vect = Vec3 3 2 4

main = return ()

GHC抱怨并给我这个错误:

Main.hs:4:8: Not in scope: data constructor `Vec3'

是不是因为我的新类型与Data.Vec的类型同名,尽管我做了合格的导入?

如果是这样的话,可以不改变我的类型名称吗?

如果没有,我如何从我的Types模块中仅导出某些类型的Data.Vec

1 个答案:

答案 0 :(得分:1)

Vec3不是数据构造函数,它是type(在本例中为class)。也许你可以在构造函数周围包装自己的包装器来实现你想要的东西?

makeVec :: (Double,Double,Double) -> Vec3
makeVec = V.fromXYZ -- TODO some float mangling