D
Size: a a a
D
NL
data Obj = forall a. (Show a) => Obj aТо есть тип-параметр для алгебраического типа переносится в правую часть, так что определение
xs :: [Obj]
xs = [Obj 1, Obj "foo", Obj 'c']
doShow :: [Obj] -> String
doShow [] = ""
doShow ((Obj x):xs) = show x ++ doShow xs
data Obj a = (Show a) => Obj aстановится
data Obj = forall a. (Show a) => Obj aчто эквивалентно
data Obj = (Show a) => exists a. Obj a(если бы такое ключевое слово существовало), отсюда и название.
D
p
NL
C
C
p
NL
C
p
p
NL
SP
NL
SP
SP
NL
p
p