5.16.5.7. Type Alias

Start data section to src/flx_parse.mly[12 /33 ] Next Prev First Last
   897: type_alias:
   898:   | TYPEDEF NAME tvarlist EQUAL expr SEMI
   899:     {
   900:       let sr = rstoken $1 $6
   901:       and name = snd $2
   902:       and return_type = `TYP_type
   903:       and body = typecode_of_expr $5
   904:       and vs = $3
   905:       in
   906:       `AST_type_alias (sr,name,vs,body)
   907:     }
   908: 
   909:   | TYPEDEF FUNCTION NAME tvarlist fun_args COLON expr EQRIGHTARROW expr SEMI
   910:     {
   911:       let sr = rstoken $1 $10
   912:       and name = snd $3
   913:       and return_type = typecode_of_expr $7
   914:       and body = typecode_of_expr $9
   915:       and args = List.map snd $5 (* elide srcref *)
   916:       and vs = $4
   917:       in
   918:       mktypefun sr name vs args return_type body
   919:     }
   920: 
   921:  | TYPEDEF FUNCTION NAME tvarlist COLON expr EQUAL type_matchings SEMI
   922:     {
   923:       let sr = rstoken $1 $9 in
   924:       let name = snd $3 in
   925:       let vs = $4 in
   926:       let t = typecode_of_expr $6 in
   927:       match t with
   928:       | `TYP_function (argt, return_type) ->
   929:         let args = [["_a",argt],None] in
   930:         let match_expr = `AST_type_match (sr,(`AST_name (sr,"_a",[]),$8)) in
   931:         let body = typecode_of_expr match_expr in
   932:         mktypefun sr name vs args return_type body
   933:       | _ ->
   934:         failwith
   935:         (
   936:           "Function '"^name^"' requires function type, got " ^
   937:           string_of_typecode t ^ " in " ^
   938:           short_string_of_src sr
   939:         )
   940:     }
   941: 
   942: 
   943:   | RENAME NAME tvarlist EQUAL qualified_name SEMI
   944:     {
   945:       let sr = rstoken $1 $6
   946:       and name = snd $2
   947:       and vs = $3
   948:       and qn = qualified_name_of_expr $5
   949:       in
   950:       `AST_inherit (sr,name,vs,qn)
   951:     }
   952: 
   953:   | RENAME FUNCTION NAME tvarlist EQUAL qualified_name SEMI
   954:     {
   955:       let sr = rstoken $1 $7
   956:       and name = snd $3
   957:       and vs = $4
   958:       and qn = qualified_name_of_expr $6
   959:       in
   960:       `AST_inherit_fun (sr,name,vs,qn)
   961:     }
   962: 
   963:   | INHERIT qualified_name SEMI
   964:     {
   965:       let sr = rstoken $1 $3
   966:       and qn = qualified_name_of_expr $2
   967:       in
   968:       `AST_inject_module (sr,qn)
   969:     }
   970: 
End data section to src/flx_parse.mly[12]