我在Haskell中编写了一个数学模型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
(不是大写) - 除此之外,我觉得我必须将这个约定应用于每种数据类型的每条评论。
有没有人有过类似的情况?任何人都可以在这种情况下想到更优雅的解决方案?
我已经看到过几次,特别是'language-c'包使用这种方法来定义它的语法树表示。如果你从来没有遇到过这种风格,那么它可能会感觉有点尴尬,但我希望人们能够很快习惯它。 – 2012-07-08 05:13:31
计算机科学只有两件难事:缓存失效和命名事物。 - 菲尔卡尔顿 – 2012-07-08 06:16:40
也许'VectorOf Double',如果你不喜欢'VectorT'。 – kennytm 2012-07-08 08:30:19