Normalize the element type of ListPat, fix #14547
authorHE, Tao <sighingnow@gmail.com>
Tue, 8 May 2018 14:53:41 +0000 (10:53 -0400)
committerBen Gamari <ben@smart-cactus.org>
Tue, 8 May 2018 18:44:57 +0000 (14:44 -0400)
commitba6e445e1cf31957f2a327a73f9f66cfa7f24e26
tree0fc4936c859b3b97d5b1405ac9bc376aa7628dfb
parent849547bd3a5bc6876268c94f97bf3e79c31340ec
Normalize the element type of ListPat, fix #14547

Summary:
The element type of `List` maybe a type family instacen, rather than a trivial type.
For example in Trac #14547,

```
{-# LANGUAGE TypeFamilies, OverloadedLists #-}

class Foo f where
        type It f
        foo :: [It f] -> f

data List a = Empty | a :! List a deriving Show

instance Foo (List a) where
        type It (List a) = a
        foo [] = Empty
        foo (x : xs) = x :! foo xs
```

Here the element type of `[]` is `It (List a)`, we should also normalize
it as `a`.

Test Plan: make test TEST="T14547"

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: thomie, carter

GHC Trac Issues: #14547

Differential Revision: https://phabricator.haskell.org/D4624
compiler/deSugar/Check.hs
testsuite/tests/deSugar/should_compile/T14547.hs [new file with mode: 0644]
testsuite/tests/deSugar/should_compile/all.T