| C.Sort C.Type -> "Type"
| _ -> assert false
in
- let ainnertypes,innertype,innersort =
+ let ainnertypes,innertype,innersort,expected_available =
(*CSC: Here we need the algorithm for Coscoy's double type-inference *)
(*CSC: (expected type + inferred type). Just for now we use the usual *)
(*CSC: type-inference, but the result is very poor. As a very weak *)
D.expected = None}
in
let innersort = T.type_of_aux' metasenv context synthesized in
- let ainnertypes =
+ let ainnertypes,expected_available =
if computeinnertypes then
- Some
- {annsynthesized =
- aux false (Some fresh_id'') context synthesized ;
- annexpected =
+ let annexpected,expected_available =
match expected with
- None -> None
+ None -> None,false
| Some expectedty' ->
- Some (aux false (Some fresh_id'') context expectedty')
- }
+ Some (aux false (Some fresh_id'') context expectedty'),true
+ in
+ Some
+ {annsynthesized =
+ aux false (Some fresh_id'') context synthesized ;
+ annexpected = annexpected
+ }, expected_available
else
- None
+ None,false
in
- ainnertypes, synthesized, string_of_sort innersort
+ ainnertypes,synthesized, string_of_sort innersort, expected_available
in
let add_inner_type id =
match ainnertypes with
C.Lambda _ -> true
| _ -> false
in
- if not father_is_lambda then
+ if (not father_is_lambda) || expected_available then
add_inner_type fresh_id''
end ;
C.ALambda