package ecaml
Source file feature.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19open! Core open! Import module Q = struct let require = "require" |> Symbol.intern end type t = Symbol.t let require = let seen = Hashtbl.create (module String) in fun t -> let name = Symbol.name t in let seen = Hashtbl.find_or_add seen name ~default:(fun () -> ref []) in if not (List.mem !seen t ~equal:Symbol.equal) then ( seen := t :: !seen; Symbol.funcall1_i Q.require (t |> Symbol.to_value)) ;;