单个构造函数变体的另一个特殊用例是使用 GADT(和存在量化)擦除一些类型信息。例如,在
type showable = Show: 'a * ('a -> string) -> showable
let show (Show (x,f)) = f x
let showables = [ Show (0,string_of_int); Show("string", Fun.id) ]
Run Code Online (Sandbox Code Playgroud)
构造函数Show将给定类型的元素与打印函数配对,然后忘记元素的具体类型。这使得拥有一个showable元素列表成为可能,即使每个元素都有不同的具体类型。