id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc,os,architecture,failure,difficulty,testcase,blockedby,blocking,related
1406,Constraint doesn't reduce in the presence of quantified type variables,ccshan,,"{{{
{-# OPTIONS -fglasgow-exts #-}
{-# OPTIONS -fallow-undecidable-instances #-}

module Problem where

data Z
data S a

class HPrefix l
instance (NSub (S Z) ndiff, HDrop ndiff l l) => HPrefix l

class NSub n1 n3 | n1 -> n3
instance NSub Z Z
instance NSub n1 n3 => NSub (S n1) n3

class HDrop n l1 l2 | n l1 -> l2
instance HDrop Z l l

t_hPrefix :: HPrefix l => l -> ()
t_hPrefix = undefined

-- This works...
thr' :: (forall r. l -> a) -> a
thr' f = f undefined
thP4' = thr' t_hPrefix

-- ... but this doesn't work...?
thr :: (forall r. r -> a) -> a
thr f = f undefined
thP4 = thr t_hPrefix
}}}
{{{
$ ghci GHCProblem.hs 
   ___         ___ _
  / _ \ /\  /\/ __(_)
 / /_\// /_/ / /  | |      GHC Interactive, version 6.6.1, for Haskell 98.
/ /_\\/ __  / /___| |      http://www.haskell.org/ghc/
\____/\/ /_/\____/|_|      Type :? for help.

Loading package base ... linking ... done.
[1 of 1] Compiling Problem          ( GHCProblem.hs, interpreted )

GHCProblem.hs:30:11:
    No instance for (HDrop ndiff r r)
      arising from use of `t_hPrefix' at GHCProblem.hs:30:11-19
    Possible fix:
      add (HDrop ndiff r r) to the expected type of an expression
    In the first argument of `thr', namely `t_hPrefix'
    In the expression: thr t_hPrefix
    In the definition of `thP4': thP4 = thr t_hPrefix
Failed, modules loaded: none.
}}}",bug,closed,normal,,Compiler (Type checker),6.6.1,fixed,,,Unknown/Multiple,x86,,Unknown,tc229,,,
