1{-# Language DatatypeContexts #-}
2{-# Language ExistentialQuantification #-}
3{-# LAnguage GADTs #-}
4{-# LAnguage KindSignatures #-}
5
6data Foo = A
7         | B
8         | C
9
10--         | data_or_newtype capi_ctype tycl_hdr constrs deriving
11data {-# Ctype "Foo" "bar" #-} F1 = F1
12data {-# Ctype       "baz" #-} Eq a =>  F2 a = F2 a
13
14data (Eq a,Ord a) => F3 a = F3 Int a
15
16data F4 a = forall x y. (Eq x,Eq y) => F4 a x y
17          | forall x y. (Eq x,Eq y) => F4b a x y
18
19
20data G1 a :: * where
21  G1A,  G1B :: Int -> G1 a
22  G1C :: Double -> G1 a
23
24data G2 a :: * where
25  G2A :: { g2a :: a, g2b :: Int } -> G2 a
26  G2C :: Double -> G2 a
27
28
29
30data (Eq a,Ord a) => G3 a = G3
31  { g3A :: Int
32  , g3B :: Bool
33  , g3a :: a
34  } deriving (Eq,Ord)
35