Легко получить экзистенциальную количественную оценку, упаковав словари в конструкторы данных.
{-# LANGUAGE GADTs #-}
data S where
MkS :: Show a => a -> S
f :: Int -> S
f x = case x of
0 -> MkS 0
_ -> MkS "non-zero"
f :: Int -> (exists a. Show a => a)
f x = case x of
0 -> 0
_ -> "non-zero"
Если нет, то есть ли документально подтвержденная причина существования этого ограничения? Избегать добавления нового квантификатора?
(exists a. Show a => a)
всегда можно переписать как что-то вродеforall c. Show b => (forall a. Show a => a -> c) -> b -> c.
Это похоже на связь в логике между экзистенциальной квантификацией и универсальной квантификацией. - person Colin Barrett   schedule 14.03.2019b
, а не только, скажем,forall c. (forall a. Show a => a -> c) -> c
? - person Daniel Wagner   schedule 14.03.2019