Skip to content

Instantly share code, notes, and snippets.

@np
Forked from avsm/gist:166441
Created August 14, 2009 07:11
Show Gist options
  • Save np/167685 to your computer and use it in GitHub Desktop.
Save np/167685 to your computer and use it in GitHub Desktop.
(* defines the Ast.binding for a function of form:
let fun_name ?(opt_arg1) ?(opt_arg2) final_ident = function_body ...
XXX: figure out the quotation magic for this, if such exists
*)
let function_with_label_args _loc ~fun_name ~final_ident ~function_body ~return_type opt_args =
let opt_args = opt_args @ [ <:patt< $lid:final_ident$ >> ] in
let rec fn _loc = function
|hd::tl -> <:expr< function $hd$ -> $fn _loc tl$ >>
|[] -> <:expr< ( $function_body$ : $return_type$ ) >>
in
<:binding< $lid:fun_name$ = $fn _loc opt_args$ >>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment