gpt4 book ai didi

haskell - GHC 在解构和重建对象时是否会创建对象的新副本?

转载 作者:行者123 更新时间:2023-12-03 13:26:21 25 4
gpt4 key购买 nike

如果我有像 data T = T Int String 这样的类型和这样的功能:

identity :: T -> T
identity (T a b) = T a b

在模式匹配中解构之后,GHC 是否会创建一个新的 T 对象,其中包含对相同 Int 和 String 的引用?或者它是否返回它收到的完全相同的对象(具有相同的内存地址)?我知道它们在语义上是等价的,我只是好奇。

最佳答案

一般来说,GHC 会分配一个新的值,而不是在那种情况下重用参数。在这种特殊情况下,您可以编写类似

f :: T -> T
f t@(T x y) = t

显式重用参数。不幸的是,在你真正想要这个的一种情况下——
fmap :: (a -> b) -> Either e a -> Either e b
fmap f (Right x) = Right (f x)
fmap f (Left x) = Left x

-- GHC 将分配一个新的 Left值,并且您不能简单地重用参数,因为结果具有不同的类型。据我所知,除了 unsafeCoerce 之外,没有办法告诉 GHC 在这种情况下重用参数。 .

关于haskell - GHC 在解构和重建对象时是否会创建对象的新副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31105630/

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