3

このコード行を考えると(この回答で最初に見た):

pVal :: Num a => a
pVal = sum . map fromIntegral $ ([1..10000000] :: [Int])

複数の型として使用される場合、式は型ごとに完全に再評価されますか? タイプごとに 1 つの結果が保持されますか?

例えば:

pInt :: Int
pInt = pVal

pDub :: Double
pDub = pVal
4

1 に答える 1

12

技術的には、Haskell 標準では指定されていません。実際には、毎回再評価されます。次を使用して、これを自分で確認できますDebug.Trace

import Debug.Trace (trace)

pVal :: Num a => a
pVal = trace "evaluating..." $ sum . map fromIntegral $ ([1..10000] :: [Int])

GHCiで試してみてください:

> pVal :: Int
evaluating...
50005000
> pVal :: Int
evaluating...
50005000

ただし、この値を具象型にバインドすると、再利用できます。

pInt :: Int
pInt = pVal

2 回目に「評価中...」がないことに注意してください。

> pInt
evaluating...
50005000
> pInt
50005000
于 2012-10-05T12:56:24.083 に答える