Skip to content

Control validity-checking of type synonym applications more carefully

Ryan Scott requested to merge RyanGlScott/ghc:wip/T16059 into master

Trac #16059 (closed) shows that when validity checking applications of type synonyms, GHC sometimes wasn't checking the expanded type enough. We must be careful, however, since checking both the expanded type as well as the arguments to the type synonym can lead to exponential blowup (see https://ghc.haskell.org/trac/ghc/ticket/16059#comment:4). Nor can we omit checking either the expanded type or the argument for correctness reasons.

The solution here is to introduce a new ExpandMode data type that is plumbed through all of the type-validity-checking functions in TcValidity. ExpandMode dictates whether we only check the expanded type (Expand), only check the arguments (NoExpand), or both (Both). Importantly, if we check Both in the function for validity checking type synonym applications, then we switch to NoExpand when checking the arguments so as to avoid exponential blowup. See Note [Correctness and performance of type synonym validity checking] for the full story.

Edited by Ryan Scott

Merge request reports