Type families difference between 7.0.4 and 7.2.1

Luite Stegeman stegeman at gmail.com
Mon Aug 15 14:12:14 CEST 2011


I've been trying to debug a problem with some code that causes name
conflicts with GHC 7.2.1, but not with 7.0.4.
The problem appears to be that in some cases, GHC 7.2.1 creates a
top-level data family, that was not there with 7.0.4. Here's a small

-- C.hs
{-# LANGUAGE TypeFamilies #-}
module C where

class C1 a where
  data F a :: *

-- B.hs
{-# LANGUAGE TypeFamilies #-}

module B where

import qualified C

data B1 a = B1 a

instance C.C1 (B1 a) where
  data C.F (B1 a) = B2 a

data family D a

-- ghci 7.0.4
> ghci B
*B> :browse
data B1 a = B1 a
data instance B.R:FB1 (B1 a) = B2 a
data family D a

-- ghci 7.2.1
> ghci B
*B> :browse
data B1 a = B1 a
data instance B.R:FB1 (B1 a) = B2 a
data family D a
data family F a

I'm not sure what's going on, why there's a difference and whether
this actually is the problem (and not just a difference in the :browse

In the original code in which I ran into the problem, there's a
similar top-level data family that wasn't there with GHC 7.0.4. The
original issue is here:
https://github.com/yesodweb/persistent/issues/17 , specifically
there's a data family Field, that appears to cause conflicts with
another Field type in Yesod. Unfortunately it's difficult to install
the packages due to dependencies that have not yet been updated for
7.2.1, and the problem is further obscured by being buried inside
template-haskell generated code.


More information about the Glasgow-haskell-users mailing list