package elpi

  1. Overview
  2. Docs
ELPI - Embeddable λProlog Interpreter

Install

Dune Dependency

Authors

Maintainers

Sources

elpi-2.0.7.tbz
sha256=80233ebd92babd696148ed553238961ec7b6de6bf157045aae1c7090840aeded
sha512=00c9ec01fabde9db1de4a58cb37480035e6f926d83b8360553419bcb99e9199f0720dde975f97ac9942ce528884d3d59d025cfbd471f12d57547429f15684d49

doc/trace_ppx/Trace_ppx/index.html

Module Trace_ppxSource

elpi.trace.ppx provides the following syntax extensions:


type t = { a : T; b : S [@trace] }

let rec f x (w[@trace]) =
 [%trace "f" (fun fmt -> .. x ..) begin
     match x with
     | K1 -> ...
     | K2 x -> [%tcall f x]
     | K2(x,y) ->
        let z = f x in
        [%spy "z" ~rid ~gid ~cond (fun fmt z -> .. z ..) z];
        [%spyl "z" ~rid ~gid ~cond (fun fmt z -> .. z ..) zs];
        [%log "K2" ~rid "whatever" 37];
        let x[@trace] = ... in e
        let w = { a; b = b[@trace ] } in
        match w with
        | { a; b = b [@trace] } ->
           z + f y (b[@trace])
 end]

[%end_trace "stop" ~rid]

If --cookie "elpi_trace=\"true\"" is not passed to the ppx rewriter:

  • [%end_trace "stop" ~rid] ---> ()
  • [%trace "foo" pp code] ---> code
  • [%tcall f x] ---> f x
  • [%spy ...] [%spyl ...] and [%log ...] ---> ()
  • f x (y[@trace]) z ---> f x z
  • let x[@trace] = .. in e ---> e
  • type x = { a : T; b : T [@trace] } ---> type x = { a : T }
  • { a; b = b [@trace] } ---> { a } (in both patterns and expressions)
  • T -> (S[@trace]) -> U ---> T -> U

In records, the shorcut "x" to mean "x = x" does not work, you have to use the longer form.

Sourceval err : loc:Ppxlib.Location.t -> string -> 'a
Sourceval trace : rid:Ppxlib_ast.Ast.expression -> loc:Ppxlib.location -> Ppxlib_ast.Ast.expression -> Ppxlib_ast.Ast.expression -> Ppxlib_ast.Ast.expression -> Ppxlib_ast.Ast.expression
Sourceval spy : loc:Ppxlib.location -> (loc:Ppxlib.location -> unit -> Ppxlib_ast.Ast.expression) -> ?cond:Ppxlib_ast.Ast.expression -> rid:Ppxlib_ast.Ast.expression -> ?gid:Ppxlib_ast.Ast.expression -> Ppxlib_ast.Ast.expression -> Ppxlib_ast.Ast.expression list -> Ppxlib_ast.Ast.expression
Sourceval spyl : loc:Ppxlib.location -> (loc:Ppxlib.location -> unit -> Ppxlib_ast.Ast.expression) -> ?cond:Ppxlib_ast.Ast.expression -> rid:Ppxlib_ast.Ast.expression -> ?gid:Ppxlib_ast.Ast.expression -> Ppxlib_ast.Ast.expression -> Ppxlib_ast.Ast.expression list -> Ppxlib_ast.Ast.expression
Sourceval log : loc:Ppxlib.location -> Ppxlib_ast.Ast.expression -> rid:Ppxlib_ast.Ast.expression -> Ppxlib_ast.Ast.expression -> Ppxlib_ast.Ast.expression -> Ppxlib_ast.Ast.expression
Sourceval cur_pred : loc:Ppxlib.location -> Ppxlib_ast.Ast.expression -> Ppxlib_ast.Ast.expression
Sourceval end_trace : loc:Ppxlib.location -> rid:Ppxlib_ast.Ast.expression -> Ppxlib_ast.Ast.expression
Sourceval tcall : loc:Ppxlib.location -> Ppxlib__.Import.expression -> Ppxlib__.Import.expression list -> Ppxlib_ast.Ast.expression
Sourceval enabled : bool Stdlib.ref
Sourceval has_iftrace_attribute : Ppxlib.attributes -> bool
Sourceval has_iftrace : Ppxlib.core_type -> bool
Sourceval map_trace : Ppxlib.Ast_traverse.map
Sourceval is_string_literal : Ppxlib.expression -> bool
Sourceval is_gid : Ppxlib.arg_label -> bool
Sourceval is_rid : Ppxlib.arg_label -> bool
Sourceval is_cond : Ppxlib.arg_label -> bool
Sourceval pull : ('a -> bool) -> ('a * 'b) list -> 'b option * ('a * 'b) list
Sourceval err_spy : loc:Ppxlib.Location.t -> unit -> 'a
Sourceval spyl_expand_function : loc:Ppxlib.location -> path:'a -> Ppxlib.expression -> Ppxlib_ast.Ast.expression
Sourceval spyl_extension : Ppxlib.Extension.t
Sourceval spyl_rule : Ppxlib.Context_free.Rule.t
Sourceval spy_expand_function : loc:Ppxlib.location -> path:'a -> Ppxlib.expression -> Ppxlib_ast.Ast.expression
Sourceval spy_extension : Ppxlib.Extension.t
Sourceval spy_rule : Ppxlib.Context_free.Rule.t
Sourceval tcall_expand_function : loc:Ppxlib.location -> path:'a -> Ppxlib.expression -> Ppxlib_ast.Ast.expression
Sourceval tcall_extension : Ppxlib.Extension.t
Sourceval tcall_rule : Ppxlib.Context_free.Rule.t
Sourceval trace_expand_function : loc:Ppxlib.location -> path:'a -> Ppxlib.expression -> Ppxlib_ast.Ast.expression
Sourceval trace_extension : Ppxlib.Extension.t
Sourceval trace_rule : Ppxlib.Context_free.Rule.t
Sourceval cur_pred_expand_function : loc:Ppxlib.location -> path:'a -> Ppxlib_ast.Ast.expression -> Ppxlib_ast.Ast.expression
Sourceval cur_pred_extension : Ppxlib.Extension.t
Sourceval cur_pred_rule : Ppxlib.Context_free.Rule.t
Sourceval log_expand_function : loc:Ppxlib.location -> path:'a -> Ppxlib.expression -> Ppxlib_ast.Ast.expression
Sourceval log_extension : Ppxlib.Extension.t
Sourceval log_rule : Ppxlib.Context_free.Rule.t
Sourceval end_trace_expand_function : loc:Ppxlib.location -> path:'a -> Ppxlib.expression -> Ppxlib_ast.Ast.expression
Sourceval end_trace_extension : Ppxlib.Extension.t
Sourceval end_trace_rule : Ppxlib.Context_free.Rule.t
Sourceval arg_trace : Ppxlib.Driver.Cookies.t -> unit
OCaml

Innovation. Community. Security.