1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
open Let_syntax.Result
module type S = sig
type t
val convert : Ast.t -> t
end
module type Out = sig
type t
val from_string : ?fname:string -> ?lnum:int -> string -> (t, string) result
val from_channel :
?fname:string -> ?lnum:int -> in_channel -> (t, string) result
val from_file : ?fname:string -> ?lnum:int -> string -> (t, string) result
end
module Make (F : S) : Out with type t = F.t = struct
type t = F.t
let from_string ?fname ?lnum input =
let+ ast = Parser.parse_from_string ?fname ?lnum input in
F.convert ast
let from_channel ?fname ?lnum ic =
let+ ast = Parser.parse_from_channel ?fname ?lnum ic in
F.convert ast
let from_file ?fname ?lnum file =
let+ ast = Parser.parse_from_file ?fname ?lnum file in
F.convert ast
end