Skip to content
  • Ryan Scott's avatar
    Remove the GHCi debugger's panicking isUnliftedType check · 8162eab2
    Ryan Scott authored and Marge Bot's avatar Marge Bot committed
    The GHCi debugger has never been that robust in the face of
    higher-rank types, or even types that are _interally_ higher-rank,
    such as the types of many class methods (e.g., `fmap`). In GHC 8.2,
    however, things became even worse, as the debugger would start to
    _panic_ when a user tries passing the name of a higher-rank thing
    to `:print`. This all ties back to a strange `isUnliftedType` check
    in `Debugger` that was mysteriously added 11 years ago
    (in commit 4d71f5ee) with no
    explanation whatsoever.
    
    After some experimentation, no one is quite sure what this
    `isUnliftedType` check is actually accomplishing. The test suite
    still passes if it's removed, and I am unable to observe any
    differences in debugger before even with data types that _do_ have
    fields of unlifted types (e.g., `data T = MkT Int#`). Given that
    this is actively causing problems (see #14828), the prudent thing
    to do seems to be just removing this `isUnliftedType` check, and
    waiting to see if anyone shouts about it. This patch accomplishes
    just that.
    
    Note that this patch fix the underlying issues behind #14828, as the
    debugger will still print unhelpful info if you try this:
    
    ```
    λ> f :: (forall a. a -> a) -> b -> b; f g x = g x
    λ> :print f
    f = (_t1::t1)
    ```
    
    But fixing this will require much more work, so let's start with the
    simple stuff for now.
    8162eab2