///|
/// Root facade for the reusable WebAssembly specification model.
///
/// The complete type model lives in `Milky2018/wasm_core/types`. These helpers
/// keep the root package useful as a stable construction entry point without
/// duplicating the spec-level data definitions.

///|
pub fn empty_module() -> @types.Module {
  @types.Module::empty()
}

///|
pub fn simple_module(
  params : ArrayView[@types.ValueType],
  results : ArrayView[@types.ValueType],
  body : ArrayView[@types.Instruction],
  export_name : String,
) -> @types.Module {
  @types.Module::simple(
    ReadOnlyArray::from_array(params),
    ReadOnlyArray::from_array(results),
    ReadOnlyArray::from_array(body),
    export_name,
  )
}

///|
pub fn func_type(
  params : ArrayView[@types.ValueType],
  results : ArrayView[@types.ValueType],
) -> @types.FuncType {
  {
    params: ReadOnlyArray::from_array(params),
    results: ReadOnlyArray::from_array(results),
  }
}

///|
pub fn func_subtype(
  params : ArrayView[@types.ValueType],
  results : ArrayView[@types.ValueType],
) -> @types.SubType {
  @types.SubType::func(
    ReadOnlyArray::from_array(params),
    ReadOnlyArray::from_array(results),
  )
}