什么是 Haskell 中的 GADT(广义代数数据类型)?

Like Like Love Haha Wow Sad Angry 2111 先看看没有 GADT 的时候我们在做啥。最简单的,比如定义一个列表: List a = Nil | Cons a (List a) 它是在做啥呢? 先看等号左边,它首先定义了一个叫 List 的 type constructor,它接受一个类型,并返回一个新的类型。其实就是类型的函数。 再看右边,它告诉我们有两种方式获得一个类型为 List a 的值,一个叫 Nil,一个叫 Cons a (List a)。 Nil 的话,你直接写 Nil,它就是一个 List a 类型的值,至……