Skip to content

GHCi statements to use HsExpansions route

Summary

Currently GHCi statements are typechecked using tcStmtsAndThen in GHC.Tc.Gen.TcGhciStmts.

tcStmtsAndThen internally uses tcSyntaxOp to typecheck statements.

We should instead be using GHC.Tc.Gen.Do.expandDoStmts so that we can start removing the dependency from tcSyntaxOp

Steps to reproduce

ghci script

:set -XImpredicativeTypes

type Id = forall a. a -> a
t :: IO Id; t = return id
p :: Id -> (Bool, Int); p f = (f True, f 3)

x <- t

fails with the following error message:

     Couldn't match type ‘a0’ with ‘Id’
      Expected: IO a0
        Actual: IO Id
      Cannot instantiate unification variable ‘a0’
      with a type involving polytypes: Id
       In a stmt of an interactive GHCi command:
        x <- GHC.GHCi.ghciStepIO :: IO a -> IO a t

Expected output is that it should assign polymorphic typed value id to x

GHC

version: 9.9 (Head)

Edited by Apoorv Ingle
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information