Vector
我在 Haskell 中编写了一个数学模块。
所以我开始了:
data Vector a = Vector !a !a !a deriving (Eq, Show)
很好——这让我可以使用任何我想要的数字数据类型。问题是我不想到处写作Double
,Vector Double
原因很简单,我不应该这样做。所以我补充说:
type Scalar = Double
type Vector = Vector Scalar
但是当然第二行是错误的,因为现在有两个Vector
. 那我应该把它改成什么?我对自己想,不,我将在我的代码中编写这个,所以我想将类型别名简单地保留为Vector
. 这意味着我必须更改数据类型名称。但是如果我改变它,那么我觉得我也应该改变构造函数,这会让一切变得更加混乱。但是,如果以这种方式使构造函数与类型别名具有相同的名称,感觉很尴尬。
现在我有这个:
type Scalar = Double
type Vector = VectorT Scalar
data VectorT a = Vector !a !a !a deriving (Eq, Show)
我T
是任意选择的(我猜它代表“类型”),但我对此不太确定。通常,当我记录函数时,我会说-- Calculate the magnitude of a Vector
,但VectorT
我觉得我真的应该使用那个类型名称。所以我只把它们称为vectors
(不大写)——除非我觉得我必须将此约定应用于每种数据类型的每个注释。
有没有人遇到过类似的情况?在这种情况下,谁能想到更优雅的解决方案?