dimension-tf:创建普通的Int,Double等值?

时间:2013-04-08 00:12:03

标签: haskell

使用dimensional-tf包时,是否可以使用“普通”Num个实例(即IntDoubleInteger)而无需使用one单位?

例如,此代码不会键入check(在ghci中):

{-# LANGUAGE NoMonomorphismRestriction #-}
import Numeric.Units.Dimensional.TF.Prelude
import qualified Prelude as P

fourpi = 4 * pi

但是这段代码确实:

{-# LANGUAGE NoMonomorphismRestriction #-}
import Numeric.Units.Dimensional.TF.Prelude
import qualified Prelude as P

fourpi = (4 *~ one) * (pi *~ one)

注意:如果我使用dimensional代替dimensional-tf,请与我们联系。

1 个答案:

答案 0 :(得分:4)

dimensional(和dimensional-tf)包隐藏了NumFractional的运算符,并定义了具有相同名称但不同类型的运算符。这些运算符不适用于未经修饰的数字类型。

所以用

{-# LANGUAGE NoMonomorphismRestriction #-}
import Numeric.Units.Dimensional.TF.Prelude
import qualified Prelude as P

你不能只写

fourpi = 4 * pi

(*) :: Num a => Dimensional v d a -> Dimensional v d' a -> Dimensional v (Mul d d') a以来,Num类型没有Dimensional个实例(由于二维类型的乘积通常具有不同的维度,因此不可能) 4pi不能解释为维度类型的值。

但是,你可以写

fourpi = 4 P.* P.pi

等,来自Num的运营商的合格版本仍然可用。