Sur l'Agda liste de diffusion, Conor McBride a demandé:
est-il possible de se procurer des les opérations comme une putatif
trustFromJust :: Maybe x -> x
ce qui n'est pas réellement vérifier Simplement et Va Mal (en Milner est sens) si la fed Rien?
Agda pourrait s'avérer Peut-être un == Just1 un, et l'intermédiaire constructeur pour le type de somme pourrait être éliminé.
Je pense, en utilisant des approches unsafeCoerce# ou unpackClosure#, mais quelqu'un d'autre a des pensées?
import GHC.Prim
trustFromJust :: Maybe x -> x
trustFromJust x = y
where Just1 y = unsafeCoerce# x
data Just1 a = Just1 a
bien que cette segmentation (seul constructeur de types permet d'éviter une partie de la fermeture de frais généraux). La base semble ok si:
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)