#2219: GADT match fails to refine type variable
---------------------------------+------------------------------------------
    Reporter:  dolio             |       Owner:                         
        Type:  bug               |      Status:  new                    
    Priority:  normal            |   Component:  Compiler (Type checker)
     Version:  6.9               |    Severity:  normal                 
    Keywords:  gadt type family  |    Testcase:                         
Architecture:  x86               |          Os:  Linux                  
---------------------------------+------------------------------------------
 The following code is accepted by the type checker in 6.8.2, but is
 rejected by a HEAD build, 6.9.20080411:

 {{{
 {-# LANGUAGE TypeFamilies, GADTs, EmptyDataDecls, TypeOperators #-}

 data Zero
 data Succ a

 data FZ
 data FS fn

 data Fin n fn where
   FZ :: Fin (Succ n) FZ
   FS :: Fin n fn -> Fin (Succ n) (FS fn)

 data Nil
 data a ::: b

 type family Lookup ts fn :: *
 type instance Lookup (t ::: ts) FZ = t
 type instance Lookup (t ::: ts) (FS fn) = Lookup ts fn

 data Tuple n ts where
   Nil   :: Tuple Zero Nil
   (:::) :: t -> Tuple n ts -> Tuple (Succ n) (t ::: ts)

 proj :: Fin n fn -> Tuple n ts -> Lookup ts fn
 proj FZ      (v ::: _)  = v
 proj (FS fn) (_ ::: vs) = proj fn vs
 }}}

 The error in question is:

 {{{
 Bug.hs:25:16:
     Occurs check: cannot construct the infinite type:
       t = Lookup (t ::: ts) fn
     In the pattern: v ::: _
     In the definition of `proj': proj FZ (v ::: _) = v
 }}}

 Which seems to indicate that the pattern match against {{{FZ}}} in the
 first case is failing to refine the type variable {{{fn}}} to {{{FZ}}}.
 Reversing the order of the cases yields the same error, so either the
 match against FS is working correctly, or the type checker thinks that it
 can solve {{{Lookup (t ::: ts) fn ~ Lookup ts fn}}}.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/2219>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to