blob: 196f6e0990785065822f33ef8cd6eb2d53754c05 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
{-# LANGUAGE TypeFamilies, GADTs #-}
-- Tests record update in the presence of
-- existentials, GADTs, type families
module Rec where
----------------- Existential
data S a where
S1 :: { fs1 :: a, fs2 :: b } -> S a
S2 :: { fs1 :: a } -> S a
updS s x = s { fs1=x }
{-
------------------ GADT
data T a b where
T1 :: { ft1 :: a, ft2 :: c, ft3 :: d } -> T a Int
T2 :: { ft1 :: a, ft3 :: c } -> T a Int
T3 :: T Int b
f :: T a1 b -> a2 -> T a2 b
f x v = x { ft1 = v }
------------------ Type family
data family R a
data instance R (a,b) where
R1 :: { fr1 :: a, fr2 :: b, fr3 :: c } -> R (a,b)
R2 :: { fr1 :: a, fr3 :: c } -> R (a,b)
updR r x = r { fr1=x }
-}
|