<div id="geary-body" dir="auto"><div>Dear Committee,</div><div><br></div><div>Jakob Brünker has proposed #607, an amendment to proposals #281 (visible forall) and #378 (Design of DH). </div><div>See the diff here: <a href="https://github.com/ghc-proposals/ghc-proposals/pull/607/files">https://github.com/ghc-proposals/ghc-proposals/pull/607/files</a></div><div><br></div><div>The amendment concerns type checking of term-level variables appearing in types, for example:</div><div><br></div><div>  f :: forall (a :: Bool) -> ...   -- visible forall, `f` expects a type-level Bool</div><div>  g :: Bool -> ...  -- ordinary arrow, `g` expects a term-level Bool</div><div>  g x = f x</div><div><br></div><div>What should happen to `x`, bound as a term variable but used as a type? #378 "Design for Dependent Types" already has an answer to this question: treat `x` as a skolem. But there are two problems</div><div><br></div><div>1. #378 does not explain this design decision in sufficient detail. This led Simon to question its inclusion: "Does it have any value, really?  Why not just reject?"</div><div>2. #281 follows this design in one section, saying "treated as a fresh skolem constant"; and rejects it in another section, saying "any uses of terms in types are ill-typed". There is a contradiction.</div><div><br></div><div>The amendment addresses both issues as follows:</div><div><br></div><div>1. A new example is added to #378, explaining how treating `x` as a skolem is useful, but only if `foreach` is available (a retained quantifier that allows dependent pattern matching)</div><div>2. Contradiction in #281 is resolved in favor of rejecting any uses of terms in types as ill-typed, saving this feature for a future proposal.</div><div><br></div><div>I recommend to accept. Please share your thoughts either here or directly on GitHub.</div><div><br></div><div>Vlad</div></div>