let rec pure_type fmt = function
| PTint -> fprintf fmt "int"
| PTbool -> fprintf fmt "bool"
| PTunit -> fprintf fmt "unit"
| PTreal -> fprintf fmt "real"
| PTexternal([],id) -> fprintf fmt "%s" id
| PTvar s -> fprintf fmt "'%s" s
| PTexternal([t],id) ->
fprintf fmt "%a %s" pure_type t id
| PTexternal(l,id) -> fprintf fmt "(%a) %s"
(print_list space pure_type) l id