type role Foo1 phantom type Foo1 :: forall k. k -> * data Foo1 a where MkFoo1a :: forall {k} (a :: k). Proxy a -> Int -> Foo1 a MkFoo1b :: forall {k} (a :: k). {a :: Proxy a, b :: Int} -> Foo1 a -- Defined at T16030.hs:8:1 type Foo2 :: forall k. k -> * data family Foo2 a -- Defined at T16030.hs:12:1 data instance forall k (a :: k). Foo2 a where MkFoo2a :: forall {k} (a :: k). Proxy a -> Int -> Foo2 a MkFoo2b :: forall {k} (a :: k). {c :: Proxy a, d :: Int} -> Foo2 a -- Defined at T16030.hs:13:15 type role Foo1 nominal phantom type Foo1 :: forall k. k -> * data Foo1 @k a where MkFoo1a :: forall {k} (a :: k). Proxy @{k} a -> Int -> Foo1 @k a MkFoo1b :: forall {k} (a :: k). {a :: Proxy @{k} a, b :: Int} -> Foo1 @k a -- Defined at T16030.hs:8:1 type Foo2 :: forall k. k -> * data family Foo2 @k a -- Defined at T16030.hs:12:1 data instance forall k (a :: k). Foo2 @k a where MkFoo2a :: forall {k} (a :: k). Proxy @{k} a -> Int -> Foo2 @k a MkFoo2b :: forall {k} (a :: k). {c :: Proxy @{k} a, d :: Int} -> Foo2 @k a -- Defined at T16030.hs:13:15