| TermDeclaration of term_former_decl
| TermDefinition of term_former_def
| LetRec of obj_kind list
- | Algebraic of (string * typ_context * (string * typ) list) list
+ (* name, left, right, constructors *)
+ | Algebraic of (string * typ_context * typ_context * (string * typ) list) list
type obj = NUri.uri * obj_kind
| `Kind ->
let arity = kind_of status ~metasenv [] arity in
let ctx,_ = split_kind_prods [] arity in
+ let right,left = HExtlib.split_nth (List.length ctx - leftno) ctx in
let ref =
NReference.reference_of_spec uri (NReference.Ind (ind,i,leftno)) in
let status =
name,ty
) cl
in
- status,i+1,(name,ctx,cl)::res
+ status,i+1,(name,left,right,cl)::res
) (status,0,[]) il
in
match rev_tyl with
let name = if name = "" then "a" else name in
name @::: l
else if List.mem name l then (name ^ "'") @::: l
- else name,l
+ else if name="" then "[erased]",l else name,l
;;
let (@::) x l = let x,l = x @::: l in x::l;;
| Algebraic il ->
String.concat "\n"
(List.map
- (fun _name,ctx,cl ->
+ (fun _name,left,right,cl ->
(*CSC: BUG always uses the name of the URI *)
- "data " ^ name_of_uri `TypeName uri ^ " " ^ pretty_print_context ctx ^ " where\n " ^
+ "data " ^ name_of_uri `TypeName uri ^ " " ^
+ pretty_print_context (right@left) ^ " where\n " ^
String.concat "\n " (List.map
(fun name,tys ->
- let namectx = namectx_of_ctx ctx in
+ let namectx = namectx_of_ctx left in
capitalize `Constructor name ^ " :: " ^
pretty_print_type status namectx tys
) cl