Is there any overhead for using Sing from GHC.TypeLits ? For example, for a program:
{-
GHC generates kernel code:
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 ~
Is this code equivalent to Test.test = __integer 5 , and will the value be computed at compile time or not?
haskell ghc
Fedor Gogolev
source share