gpt4 book ai didi

compiler-construction - 不安全的强制和更高效的 Agda 代码 (-ftrust-me-im-agda)

转载 作者:行者123 更新时间:2023-12-03 08:58:55 26 4
gpt4 key购买 nike

在 Agda 邮件列表中,Conor McBride 问道:

is there any way to get hold of operations like a putative

   trustFromJust :: Maybe x -> x

which doesn't actually check for Just and Goes Wrong (in Milner's sense) if fed Nothing?



Agda 可能会证明 Maybe a == Just1 a,并且可以消除 sum 类型的中间构造函数。

我可以想到使用 unsafeCoerce# 或 unpackClosure# 的方法,但是其他人有想法吗?
import GHC.Prim

trustFromJust :: Maybe x -> x
trustFromJust x = y
where Just1 y = unsafeCoerce# x

data Just1 a = Just1 a

虽然这个段错误(单个构造函数类型可以避免一些闭包开销)。核心看起来不错:
main2 =
case (Data.Maybe.Just @ Type.Integer main3)
`cast`
(CoUnsafe
(Data.Maybe.Maybe Type.Integer)
(Just1 Type.Integer)
:: Data.Maybe.Maybe Type.Integer
~
Just1 Type.Integer)
of _ { Just1 y_aeb ->
$wshowsPrec 0 y_aeb ([] @ Char)

最佳答案

由于这是一个研究问题,我们有几种可能的方法,但它们都归结为:

  • 反转 Maybe
  • 的标签位的技巧

    关于compiler-construction - 不安全的强制和更高效的 Agda 代码 (-ftrust-me-im-agda),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3852041/

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