[Haskell-beginners] "stage restriction" when using Data.Heap

Brent Yorgey byorgey at seas.upenn.edu
Tue Jan 8 18:02:45 CET 2013


On Tue, Jan 08, 2013 at 07:03:20AM +0100, Martin Drautzburg wrote:
> When I :load this into ghci
> 
> import Data.Heap 
> 
> heap = empty :: MinHeap (Int,String)
> insert (1,"kjh") heap
> 
> I get 
> 
>     GHC stage restriction: `heap'
>       is used in a top-level splice or annotation,
>       and must be imported, not defined locally
>     In the second argument of `insert', namely `heap'
>     In the expression: insert (1, "kjh") heap
> 
> But when I type in 
> 
> import Data.Heap 
> 
> let heap = empty :: MinHeap (Int,String)
> insert (1,"kjh") heap
> 
> everything works and I get
> 
>  fromList [(1,"kjh")]
> 
> Why is that so and what can I do to prevent the "stage restriction"?

Twan's analysis is correct.  But wow, that's a horrible error
message.  Do you by any chance have the TemplateHaskell extension
enabled (either with {-# LANGUAGE TemplateHaskell #-} at the top or
your file, or with :set -XTemplateHaskell in a .ghci file, or anything
like that)?  If not this should really be filed as a bug, GHC has no
business giving TH-related error messages without TH being turned on.

-Brent



More information about the Beginners mailing list