2012-01-26 8 views
2

ocamlp4で新しくなった。私はそれを始めるためにJake Donham's blogを読んでいます。camp4:Ast.TyOrを検索するAst.TySumとの一致方法

私は小さなCamlp4のプログラムウィッヒのように単純型を取得します書き込みしようとしている:

type t = Foo | Bar | Baz 

t_of_stringt_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)$ >> -> 

しかし、これは動作しません:私はタイプと一致することができるはずblog上のコードに続いて

。私はcampl4of xx.ml -printer oとASTを見て、私は興味深い部分にそれを軽減する場合:

(Ast.TyDcl (_, tid, [], 
     (Ast.TySum (_, 
     (Ast.TySum (_, ors)))), []) 

しかし、私は試合の場合、ASTは、スプリアスを持っているようですが、思え

(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")))))))), 
     [])) 

のようなものを一致させる必要がありますTySumしかし、私はそれを取り除くことができませんでした。

誰にも解決策がありますか?

答えて

2

これは、3.12.1 Mantisの直後に修正されたよく知られたバグです。バグが修正された次のバージョンでは、ソリューションが機能しない可能性があることに注意してください。

1

最終的に解決策が見つかりました。 これはocaml 3.12.1のディエンテ構文です。 マッチケースを置換する場合は、

<:str_item< type $lid:tid$ = $ors$ >> 

となります。

しかし、なぜか分かりません。

関連する問題