gpt4 book ai didi

haskell - Dimension-tf : creating ordinary Int, Double 等值?

转载 作者:行者123 更新时间:2023-12-03 07:08:21 28 4
gpt4 key购买 nike

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

例如,此代码不进行类型检查(在 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)

注意:请告诉我是否应该使用 Dimension 而不是 Dimension-tf

最佳答案

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 的实例类型(不可能有,因为二维类型的乘积通常具有不同的维度),因此 4pi不能被解释为维度类型的值。

但是,您可以写

fourpi = 4 P.* P.pi

等等,来自 Num 的运算符的限定版本仍然可用。

关于haskell - Dimension-tf : creating ordinary Int, Double 等值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15869398/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com