https://github.com/mit-plv/fiat-crypto
Raw File
Tip revision: e38849fe4a842fdeaa003cb28ba80b844a332653 authored by Jason Gross on 28 June 2021, 20:45:50 UTC
Fix lingering xargs
Tip revision: e38849f
StandaloneHaskellMain.v
Require Export Coq.extraction.Extraction.
Require Export Coq.extraction.ExtrHaskellBasic.
Require Export Coq.extraction.ExtrHaskellString.
Require Import Coq.Lists.List.
Require Import Coq.Strings.String.
Require Crypto.Util.Strings.String.
Require Import Crypto.Util.Strings.Decimal.
Require Import Crypto.Util.Strings.HexString.
Require Import Crypto.CLI.
Require Import Crypto.Util.Notations.
Import ListNotations. Local Open Scope string_scope.

Global Set Warnings Append "-extraction-opaque-accessed".
Extraction Language Haskell.
Global Unset Extraction Optimize.

Axiom IO_unit : Set.
Axiom _IO : Set -> Set.
Axiom printf_string : string -> _IO unit.
Axiom getArgs : _IO (list string).
Axiom getProgName : _IO string.
Axiom raise_failure : forall A, string -> A.
Axiom _IO_bind : forall A B, _IO A -> (A -> _IO B) -> _IO B.
Axiom _IO_return : forall A : Set, A -> _IO A.
Axiom cast_io : _IO unit -> IO_unit.
Extract Constant printf_string =>
"\s -> Text.Printf.printf ""%s"" s".
Extract Constant _IO "a" => "GHC.Base.IO a".
Extract Inlined Constant getArgs => "System.Environment.getArgs".
Extract Inlined Constant getProgName => "System.Environment.getProgName".
Extract Constant raise_failure => "\x -> Prelude.error x".
Extract Inlined Constant _IO_bind => "(Prelude.>>=)".
Extract Inlined Constant _IO_return => "return".
Extract Inlined Constant IO_unit => "GHC.Base.IO ()".
Extract Inlined Constant cast_io => "".

Local Notation "x <- y ; f" := (_IO_bind _ _ y (fun x => f)).

Module UnsaturatedSolinas.
  Definition main : IO_unit
    := cast_io
         (argv <- getArgs;
            prog <- getProgName;
            ForExtraction.UnsaturatedSolinas.PipelineMain
              (prog::argv)
              (fun res => printf_string
                         (String.concat "" res))
              (fun err => raise_failure _ (String.concat String.NewLine err))).
End UnsaturatedSolinas.

Module WordByWordMontgomery.
  Definition main : IO_unit
    := cast_io
         (argv <- getArgs;
            prog <- getProgName;
            ForExtraction.WordByWordMontgomery.PipelineMain
              (prog::argv)
              (fun res => printf_string
                         (String.concat "" res))
              (fun err => raise_failure _ (String.concat String.NewLine err))).
End WordByWordMontgomery.

Module SaturatedSolinas.
  Definition main : IO_unit
    := cast_io
         (argv <- getArgs;
            prog <- getProgName;
            ForExtraction.SaturatedSolinas.PipelineMain
              (prog::argv)
              (fun res => printf_string
                         (String.concat "" res))
              (fun err => raise_failure _ (String.concat String.NewLine err))).
End SaturatedSolinas.
back to top