Template Haskell splicing drops lots of type arguments
The conversion functions (in the Convert module) drop type arguments in various places.
Here are two examples:
data T a b c = Mk a b c
bar :: $( return $ AppT (InfixT (ConT ''Int) ''T (ConT ''Bool)) (ConT ''Double) )
bar = Mk 5 True 3.14
This correct code leads to an error
Expecting one more argument to ‘T Int Bool’
because the Double is forgotten.
Similarly,
baz :: $( return $ AppT (ParensT (ConT ''Maybe)) (ConT ''Int) )
baz = Just 5
fails because baz :: (Maybe) isn't valid.
On the other hand,
frob :: forall (a :: $( [t| * Int |] )). a -> a
frob x = x
is spuriously accepted, because GHC has forgotten about the Int argument.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.4.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Template Haskell |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |