32 votes

Contrainte non sûre et code Agda plus efficace (-ftrust-me-im-agda)

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)

6voto

Don Stewart Points 94361

Étant donné qu'il s'agit d'une question de recherche, nous avons plusieurs pistes possibles, mais elles se résument toutes à:

  • Jouez des tours inversant les bits de balise de peut-être

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X