341 else ps |
341 else ps |
342 end; |
342 end; |
343 |
343 |
344 fun mk_v ((names, vs), s) = (case AList.lookup (op =) vs s of |
344 fun mk_v ((names, vs), s) = (case AList.lookup (op =) vs s of |
345 NONE => ((names, (s, [s])::vs), s) |
345 NONE => ((names, (s, [s])::vs), s) |
346 | SOME xs => let val s' = variant names s in |
346 | SOME xs => let val s' = Name.variant names s in |
347 ((s'::names, AList.update (op =) (s, s'::xs) vs), s') end); |
347 ((s'::names, AList.update (op =) (s, s'::xs) vs), s') end); |
348 |
348 |
349 fun distinct_v (nvs, Var ((s, 0), T)) = |
349 fun distinct_v (nvs, Var ((s, 0), T)) = |
350 apsnd (Var o rpair T o rpair 0) (mk_v (nvs, s)) |
350 apsnd (Var o rpair T o rpair 0) (mk_v (nvs, s)) |
351 | distinct_v (nvs, t $ u) = |
351 | distinct_v (nvs, t $ u) = |
405 (fn (_, NONE) => NONE | (v, SOME js) => SOME (v, [([], js)])) |
405 (fn (_, NONE) => NONE | (v, SOME js) => SOME (v, [([], js)])) |
406 (arg_vs ~~ iss); |
406 (arg_vs ~~ iss); |
407 |
407 |
408 fun check_constrt ((names, eqs), t) = |
408 fun check_constrt ((names, eqs), t) = |
409 if is_constrt thy t then ((names, eqs), t) else |
409 if is_constrt thy t then ((names, eqs), t) else |
410 let val s = variant names "x"; |
410 let val s = Name.variant names "x"; |
411 in ((s::names, (s, t)::eqs), Var ((s, 0), fastype_of t)) end; |
411 in ((s::names, (s, t)::eqs), Var ((s, 0), fastype_of t)) end; |
412 |
412 |
413 fun compile_eq (gr, (s, t)) = |
413 fun compile_eq (gr, (s, t)) = |
414 apsnd (Pretty.block o cons (Pretty.str (s ^ " = ")) o single) |
414 apsnd (Pretty.block o cons (Pretty.str (s ^ " = ")) o single) |
415 (invoke_codegen thy defs dep module false (gr, t)); |
415 (invoke_codegen thy defs dep module false (gr, t)); |