open Import (* A functional stack. *) type 'a t = 'a List.t let empty = [] let push v t = v :: t let pop = function [] -> None | x :: ts -> Some (x, ts) let peek = function [] -> None | x :: _ -> Some x let pp pp ppf = Fmt.lst pp ppf let to_list v = v let jsont e_jsont = let stack_of_list lst = List.fold_left (fun acc v -> push v acc) empty lst in Jsont.map (Jsont.list e_jsont) ~dec:stack_of_list ~enc:to_list