【发布时间】:2018-03-01 07:09:58
【问题描述】:
定义惰性字段时,没有例外,直到你打印它。
> data T = T Int deriving (Show)
> let t = T undefined
> t
T *** Exception: Prelude.undefined
CallStack (from HasCallStack):
error, called at libraries/base/GHC/Err.hs:79:14 in base:GHC.Err
undefined, called at <interactive>:3:7 in interactive:Ghci3
对于严格的字段 (!Int),我认为 undefined 会立即被评估,这会导致异常,但实际上,直到你打印它之前它仍然没有被评估。这是为什么呢?
> data X = X !Int deriving (Show)
> let x = X undefined
> x
*** Exception: Prelude.undefined
CallStack (from HasCallStack):
error, called at libraries/base/GHC/Err.hs:79:14 in base:GHC.Err
undefined, called at <interactive>:6:11 in interactive:Ghci5
【问题讨论】:
标签: haskell