aboutsummaryrefslogtreecommitdiff
path: root/doc/plugin_tutorial/tuto1/src/simple_print.ml
blob: 48b5f2214ce85238673b9400f04b73f067c18486 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(* A more advanced example of how to explore the structure of terms of
  type constr is given in the coq-dpdgraph plugin. *)

let simple_body_access gref =
  match gref with
  | Globnames.VarRef _ ->
    failwith "variables are not covered in this example"
  | Globnames.IndRef _ ->
    failwith "inductive types are not covered in this example"
  | Globnames.ConstructRef _ ->
    failwith "constructors are not covered in this example"
  | Globnames.ConstRef cst ->
    let cb = Environ.lookup_constant cst (Global.env()) in
    match Global.body_of_constant_body Library.indirect_accessor cb with
    | Some(e, _) -> EConstr.of_constr e
    | None -> failwith "This term has no value"