code: func OrderedMap(ktype, vtype interface{}) *OrdMap {
  	// A giant hack to get `Check` to do all the type construction work for us.
  	chk := ty.Check(
  		new(func(*ty.A, *ty.B) (ty.A, ty.B, map[ty.A]ty.B, []ty.A)),
  		ktype, vtype)
  	tkey, tval := chk.Returns[0], chk.Returns[1]
  	tmap, tkeys := chk.Returns[2], chk.Returns[3]
  
  	return &OrdMap{
  		m:     reflect.MakeMap(tmap),
  		keys:  reflect.MakeSlice(tkeys, 0, 10),
  		ktype: tkey,
  		vtype: tval,
  	}
  }
docs: // OrderedMap returns a new instance of OrdMap instantiated with the key
  // and value types given. Namely, the types should be provided via nil
  // pointers, e.g., to create a map from strings to integers:
  //
  //	omap := OrderedMap(new(string), new(int))
  //
  // An ordered map maintains the insertion order of all keys in the map.
  // Namely, `(*OrdMap).Keys()` returns a slice of keys in the order
  // they were inserted. The order of a key can *only* be changed if it is
  // deleted and added again.
  //
  // All of the operations on an ordered map have the same time complexity as
  // the built-in `map`, except for `Delete` which is O(n) in the number of
  // keys.