Can’t say that I understand this concept, but just laying down the snippet any way:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| {-# LANGUAGE Rank2Types #-}
concrete_type :: (forall a. a -> a) -> (Int, Bool) concrete_type f = let x = f 1 y = f True in (x, y)
var_type :: (forall t. t -> t) -> a -> b -> (a, b) var_type f a b = let x = f a y = f b in (x, y)
main :: IO () main = do return ()
|
Reference