gpt4 book ai didi

performance - haskell /GHC : Unsafely deconstruct a constructor?

转载 作者:行者123 更新时间:2023-12-04 15:33:02 27 4
gpt4 key购买 nike

这是我真正要问的一般问题的一个具体案例:假设我处于代码的性能关键部分并且我收到了一个值

x :: Maybe Int

我知道是 Just Int而不是 Nothing ,但由于我无法控制代码,我无法安排接收实际的 Int直接地。我想要做
case x of
Just i -> whatever i

但我不希望 GHC 插入任何检查或错误处理或跳转或任何东西;只需将这些位解释为 Just i 的形式让我处理后果。

这可能吗? (是的,我知道这是不应该经常做的事情。)

最佳答案

有时,您可以通过添加一些模式签名来帮助 GHC 确定 GADT 模式匹配是完全的。我不太确定为什么这有时会有所帮助,但确实可以。如果您真的想要不安全,那么实现它的方法是制作一个比您正在使用的 GADT 提供更多信息的 GADT,并以不安全的方式强制它。像这样的东西:

data Shmaybe :: Bool -> * -> * where
Noway :: Shmaybe r a
Shucks :: a -> Shmaybe True a

fromShucks :: ShMaybe True a -> a
fromShucks (Shucks a) = a

unsafeFromJust :: forall a . Maybe a -> a
unsafeFromJust m = fromShucks (unsafeCoerce m :: Shmaybe True a)

构造函数在参数类型和顺序上匹配很重要。显然,这一切都是 absurd 的不安全,并且没有任何保证。可能会发生段错误。

关于performance - haskell /GHC : Unsafely deconstruct a constructor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32034889/

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