答案 0 :(得分:4)
一个简单的例子:
GHCi> data Foo = Foo { bar :: !Int, baz :: String } deriving Show
bar
是严格字段,而baz
是非严格字段。首先,让我们忘记baz
:
GHCi> x = Foo { bar = 3 }
<interactive>:49:5: warning: [-Wmissing-fields]
* Fields of `Foo' not initialised: baz
* In the expression: Foo {bar = 3}
In an equation for `x': x = Foo {bar = 3}
我们收到警告,但x
已构建完毕。 (注意,在使用stack ghci
时,默认情况下会在GHCi中打印警告。您可能必须使用:set -Wall
在纯GHCi中查看它;我不完全确定。)尝试使用{{1 baz
中{}}自然让我们陷入困境......
x
......虽然我们可以很快到达GHCi> x
Foo {bar = 3, baz = "*** Exception: <interactive>:49:5-19: Missing field in record construction baz
:
bar
但是,如果我们忘记GHCi> bar x
3
,我们甚至无法构建值以开始:
bar