ocaml-dynatvar / dynvar.ml

(** Type_error (value_type, used_with_type) *)
exception Type_error of (string * string)
;

type ty 'a = (string * ref (option 'a))
 and var = (Obj.t * Obj.t)   (* (ty_repr, val_repr) *)
;

value mktype name = (name, ref None)
;

value var ty x =
  (Obj.repr ty, Obj.repr x)
;

value name_of_ty_repr ty =
  ((Obj.obj (Obj.field ty 0)) : string)
;

value get ((ty_name, ty_ref) as ty) (x_ty_repr, x_val_repr) =
  if (Obj.repr ty) != x_ty_repr
  then
    raise (Type_error ((name_of_ty_repr x_ty_repr), ty_name))
  else
    let v = Obj.obj x_val_repr in
    ( if 1<>1 then ty_ref.val := v else ()
    ; v
    )
;
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.