// RUN: %target-typecheck-verify-swift

// https://github.com/apple/swift/issues/53125

typealias T1 = Int
typealias T2 = Float
typealias T3 = Bool

protocol P {
  associatedtype R
  static var foo: (T1, (R) -> T2) { get }
}

extension P {
  static func bind() -> (T1, (R) -> T3) {
    return (1, { _ in true })
  }
}

struct S: P {
  typealias R = T3

  static let foo: (T1, (R) -> T2) = bind()
  // expected-error@-1 {{cannot convert value of type '(T1, (S.R) -> T3)' (aka '(Int, (Bool) -> Bool)') to specified type '(T1, (S.R) -> T2)' (aka '(Int, (Bool) -> Float)')}}
}
