func ==><T, U>(lhs: T, rhs: U.Type) throws U { guard let value = lhs as? rhs else { throw ... } return value }
==>
try exp => { try cast($0, to: Type.self) }
guard