let scheme' ?pos rqs rnames fnames f = let fl, fm = variable_set (const (Flexible, None)) fnames in let rl, rm = variable_set (fun v -> (Rigid, Some v)) rnames in let m = map_union fm rm in Scheme (pos_or_undef pos, rqs @ rl, fl, f m, m)