首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dimensional tf:创建普通的Int、Double等值?

dimensional tf:创建普通的Int、Double等值?
EN

Stack Overflow用户
提问于 2013-04-08 08:12:03
回答 1查看 68关注 0票数 4

在使用dimensional-tf包时,是否可以在不使用one单元的情况下使用“普通”Num实例(即IntDoubleInteger)?

例如,以下代码不进行类型检查(在ghci中):

代码语言:javascript
复制
{-# LANGUAGE NoMonomorphismRestriction #-}
import Numeric.Units.Dimensional.TF.Prelude
import qualified Prelude as P

fourpi = 4 * pi

但是这段代码做到了:

代码语言:javascript
复制
{-# LANGUAGE NoMonomorphismRestriction #-}
import Numeric.Units.Dimensional.TF.Prelude
import qualified Prelude as P

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

注意:如果我应该使用dimensional而不是dimensional-tf,请让我知道。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-08 08:42:27

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

所以有了

代码语言:javascript
复制
{-# LANGUAGE NoMonomorphismRestriction #-}
import Numeric.Units.Dimensional.TF.Prelude
import qualified Prelude as P

你不能就这么写

代码语言:javascript
复制
fourpi = 4 * pi

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

但是,您可以编写

代码语言:javascript
复制
fourpi = 4 P.* P.pi

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15869398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档