///|
type Z

///|
pub impl ToUInt64 for Z with to_uint64(value : UInt64) -> UInt64 {
  value
}

///|
trait ToUInt64 {
  to_uint64(value : UInt64) -> UInt64
}

///|
pub fn[T : ToUInt64] to_uint64(_ : FuncRef[(T) -> Unit]) -> UInt64 {
  T::to_uint64(0)
}

///|
pub impl ToInt for Z with to_int(value : Int) -> Int {
  value
}

///|
trait ToInt {
  to_int(value : Int) -> Int
}

///|
pub fn[T : ToInt] to_int(_ : FuncRef[(T) -> Unit]) -> Int {
  T::to_int(0)
}