-- {-# OPTIONS -v tc.with:50 #-}

module Issue311 where

open import Common.Level

postulate
  A : Set
  C : (b : Level) (B : A → Set b) → Set b
  f : (b : Level) (B : A → Set b) → C b B → A
  g : (b : Level) (B : A → Set b) (d : C b B) → B (f b B d)
  P : (c : Level) → Set c
  Q : A → Set
  checkQ : ∀ a → Q a → Set

T : (c : Level) → Set c
T c = P c → A

Foo : (c : Level) (d : C c (λ _ → T c)) →
      Q (f c (λ _ → T c) d) → Set
Foo c d q with f c (λ _ → T c) d | g c (λ _ → T c) d
Foo c d q | x | y  = checkQ x q

-- C-c C-, gives:
--
-- Goal: Set₁
-- ————————————————————————————————————————————————————————————
-- q : Q (f c (λ _ → P c → A) d)
-- y : P c → A
-- x : A
-- d : C c (λ _ → P c → A)
-- c : Level
--
-- Note that q has type Q (f c (λ _ → P c → A) d); it should have type
-- Q x.
