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