使用dimensional-tf
包时,是否可以使用“普通”Num
个实例(即Int
,Double
,Integer
)而无需使用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
,请与我们联系。
答案 0 :(得分:4)
dimensional
(和dimensional-tf
)包隐藏了Num
和Fractional
的运算符,并定义了具有相同名称但不同类型的运算符。这些运算符不适用于未经修饰的数字类型。
所以用
{-# 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
个实例(由于二维类型的乘积通常具有不同的维度,因此不可能) 4
和pi
不能解释为维度类型的值。
但是,你可以写
fourpi = 4 P.* P.pi
等,来自Num
的运营商的合格版本仍然可用。