gpt4 book ai didi

haskell - 缺少严格字段的​​ GHC 错误

转载 作者:行者123 更新时间:2023-12-05 01:43:19 25 4
gpt4 key购买 nike

我正在阅读 this article .内容如下:

When constructing a value with record syntax, GHC will give you an error if you forget a strict field. It will only give you a warning for non-strict fields.

谁能给我一个具体的例子?

最佳答案

一个简单的例子:

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 中看到它;我不完全当然。)尝试在 x 中使用 baz 自然会给我们带来麻烦......

GHCi> x
Foo {bar = 3, baz = "*** Exception: <interactive>:49:5-19: Missing field in record construction baz

...虽然我们可以很好地到达bar:

GHCi> bar x
3

但是,如果我们忘记 bar,我们甚至无法构造开始的值:

GHCi> y = Foo { baz = "glub" }

<interactive>:51:5: error:
* Constructor `Foo' does not have the required strict field(s): bar
* In the expression: Foo {baz = "glub"}
In an equation for `y': y = Foo {baz = "glub"}
GHCi> y

<interactive>:53:1: error: Variable not in scope: y

关于haskell - 缺少严格字段的​​ GHC 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49715102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com