我正在开发一套Haskell中的一小块举重实用程序作为学习练习。我定义的数据类型Weight
使得:Haskell自定义数据类型,实例编号和冗余
data Weight = Wt Float Unit
deriving (Show, Eq)
data Unit = Lb | Kg
deriving (Show, Eq)
instance Num Weight where
Wt x Lb + Wt y Lb = Wt (x + y) Lb
Wt x Lb * Wt y Lb = Wt (x * y) Lb
negate (Wt x Lb) = Wt (negate x) Lb
abs (Wt x Lb) = Wt (abs x) Lb
signum (Wt x Lb) = Wt (signum x) Lb
fromInteger x = Wt (fromInteger x) Lb
-- Repeat for Kg...
有没有什么办法可以指定一个泛型类型在民实例定义的Unit
?这将是很好的指定类似的东西:
instance Num Weight where
Wt x a + Wt y a = Wt (x + y) a
-- ...
而不是重复所有与其他构造函数。
小心!千克是质量单位,而不是重量。 SI(派生)单位重量是牛顿,等于1公斤米/秒^ 2。 – dfeuer 2015-02-23 05:53:05
你打算让Kg和Lb加在一起吗?否则,请考虑使用幻像类型来静态保证这不会发生。 – chi 2015-02-23 09:26:29