小编use*_*697的帖子

为什么toInteger :: Int - >整数是懒惰的?

我有以下代码:

{-# NOINLINE i2i #-}
i2i :: Int -> Integer
i2i x = toInteger x

main = print $ i2i 2
Run Code Online (Sandbox Code Playgroud)

使用-ddump-simpl标志运行GHC可以:

[Arity 1
 NoCafRefs
 Str: DmdType U(L)]
Main.i2i = GHC.Real.toInteger1
Run Code Online (Sandbox Code Playgroud)

似乎从Int到Integer的转换是懒惰的.为什么会这样 - 我有什么可以的

(toInteger _|_ ::Int) /= _|_
Run Code Online (Sandbox Code Playgroud)

编辑:这个问题与GHC严格性分析器有关,而不是与懒惰本身有关.此代码源于探索标准均值函数:

--mean :: Integer -> Integer -> [Integer] -> Double
mean :: Integer -> Int -> [Integer] -> Double
mean acc n [] = fromIntegral acc / fromIntegral n
mean acc n (x:xs) = mean (acc + x) (n + …
Run Code Online (Sandbox Code Playgroud)

haskell lazy-evaluation

4
推荐指数
1
解决办法
409
查看次数

标签 统计

haskell ×1

lazy-evaluation ×1