私はocamlp4が初めてです。私はそれを始めるためにJake Donham のブログを読んでいます。
次のような単純な型を取得する小さな CamlP4 プログラムを作成しようとしています。
type t = Foo | Bar | Baz
t_of_string
と関数を生成しt_to_string
ます。
ブログのコードに従って、タイプを次のように一致させることができるはずです。
let wrap_str_item si =
let _loc = Ast.loc_of_str_item si in
<:str_item< $si$ >>
match wrap_str_item si with
| <:str_item< type $lid:tid$ = $Ast.TySum (_, ors)$ >> ->
しかし、これはうまくいきません。ASTを見campl4of xx.ml -printer o
て、興味深い部分に減らします:
(Ast.TyDcl (_, tid, [],
(Ast.TySum (_,
(Ast.TySum (_, ors)))), [])
しかし、私は次のようなものと一致する必要があります
(Ast.TyDcl (_loc, "t", [],
(Ast.TySum (_loc,
(Ast.TyOr (_loc,
(Ast.TyOr (_loc, (Ast.TyId (_loc, (Ast.IdUid (_loc, "Foo")))),
(Ast.TyId (_loc, (Ast.IdUid (_loc, "Bar")))))),
(Ast.TyId (_loc, (Ast.IdUid (_loc, "Baz")))))))),
[]))
match ケースの AST に spurious があるようですがTySum
、それを取り除くことができませんでした。
誰かがその解決策を持っていますか?