• simonpj's avatar
    [project @ 2001-12-03 11:36:26 by simonpj] · 525aeb93
    simonpj authored
    ------------------------------------
    	Fix a tiresome and longstanding bug
    	in typechecking of unlifted bindings
    	------------------------------------
    
    Consider
    
    	data T = MkT Int# Int#
    
    	f :: T -> Int#
    	f t = a +# b
    	    where
    	      MkT a b = if ... then t else t
    
    This should really be OK, but if the "..." includes
    some constraints, the constraint simplifier was trying to
    generate some d1=d2 bindings. This is Bad because the desugarer
    treats unlifted bindings very specially (they are strict).
    
    This commit fixes the problem, by ensuring we never get
    local dictionary binding for an unlifted group.
    
    This fixes the bug which has been making the Alpha port fall
    over with a pattern-match failure in DsExpr.  Nothing to do
    with Alpha; it's just that the word-size change gave rise
    to a little more commoning-up of literals in the type checker
    which in turn made the desugarer it fall over.
    525aeb93
TcBinds.lhs 29.6 KB