I've been planning on doing that investigation as part of some implementation work in the type checker.
What we have today is just fundamentally broken:
let x = (a: 1, b: 2)
let z1: (c: Int, d: Int) = x // cannot convert value of type '(a: Int, b: Int)' to specified type '(c: Int, d: Int)'
let y: (Int, Int) = x // works: makes sense
let z2: (c: Int, d: Int) = y // works: uh, what?