gpt4 book ai didi

haskell - GHC TypeLit 开销

转载 作者:行者123 更新时间:2023-12-02 13:53:04 32 4
gpt4 key购买 nike

使用GHC.TypeLits中的Sing有任何开销吗? ?以程序为例:

{-# LANGUAGE DataKinds #-}

module Test (test) where

import GHC.TypeLits

test :: Integer
test = fromSing (sing :: Sing 5)

GHC生成核心代码:

Test.test1 :: GHC.Integer.Type.Integer
[GblId,
Str=DmdType,
Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=0, Value=True,
ConLike=True, WorkFree=True, Expandable=True,
Guidance=IF_ARGS [] 100 0}]
Test.test1 = __integer 5

Test.test :: GHC.Integer.Type.Integer
[GblId,
Str=DmdType,
Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=0, Value=True,
ConLike=True, WorkFree=True, Expandable=True,
Guidance=ALWAYS_IF(unsat_ok=True,boring_ok=True)}]
Test.test =
Test.test1
`cast` (<GHC.TypeLits.NTCo:SingI> <GHC.TypeLits.Nat> <5> ; (<GHC.TypeLits.TFCo:R:SingNatn
<5>> ; <GHC.TypeLits.NTCo:R:SingNatn
<5>>)
:: GHC.TypeLits.SingI GHC.TypeLits.Nat 5
~#
GHC.Integer.Type.Integer)

此代码是否相当于 Test.test = __integer 5 并且值是否会在编译时计算?

最佳答案

是的,这相当于 Test.test = __integer 5cast 部分只是类型系统噪音(您可以在论文 "System F with Type Equality Coercions" 中了解它的含义)作者:Martin Sulzmann、Manuel M. T. Chakravarty、Simon Peyton Jones 和 Kevin Donnelly)。相关引用:

Cast expressions have no operational effect, but they serve to explain to the type system when a value of one type should be treated as another.

编辑:实际上,在 GHC 7.6 中,test = fromSing (sing::Sing 5)assembly codetest = 5< 的代码不同 显然实际上有一些开销,但这个问题似乎在 HEAD 中得到了解决。

关于haskell - GHC TypeLit 开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19020829/

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