gpt4 book ai didi

purescript - 有没有办法在不使用 unsafeCoerce 的情况下获取子记录?

转载 作者:行者123 更新时间:2023-12-03 16:50:02 24 4
gpt4 key购买 nike

type Foo = {
x :: Int,
y :: Int
}

type Bar = {
x :: Int
}

foo :: Foo
foo = {x:1,y:2}
bar :: Bar
bar = foo

Could not match type

()

with type

( y :: Int )

为什么这不可能?

我无法使用

type Bar a = {
x :: Int | a
}

并且不想重新创建记录

bar = {x : foo.x}

unsafeCoerce 是唯一的选择吗?

使用 unsafeCoerce 可能会出现什么问题?

最佳答案

如果您想编写处理仅具有某些特定字段的记录的函数,那么您可以使用开放行:

bar :: forall r. { x :: Int | r } -> { x :: Int | r }
bar rec = rec

这仍然与 FooBar 同义词兼容。

但是,如果这也不好,并且您只是想“忘记”y,那么 unsafeCoerce 应该可以使用,只要您只强制执行FooBar,并且不再返回。

我强烈建议使用别名unsafeCoerce,而不是直接使用它:

forget :: Foo -> Bar
forget = Unsafe.Coerce.unsafeCoerce

即使你认为自己有原则地使用它,直接使用它也很容易出错。

就我个人而言,我只是创建一个没有字段的新记录,即使它涉及一些样板文件。

关于purescript - 有没有办法在不使用 unsafeCoerce 的情况下获取子记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36245469/

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