let rec explicit_or_implicit p e =
match p with
| PTypeConstraint (pos, p, typ) ->
explicit_or_implicit p (ETypeConstraint (pos, e, typ))
| PVar (_, name) -> (
try
let typ, e = extract_type e in
Explicit (name, typ, e)
with Not_found ->
Implicit (name, e)
)
| _ -> NotPVar