是否可以在 Haskell 中创建一个函数,其中 returns 数据类型的构造函数列表?

Is it possible to create a function in Haskell which returns a list of the constructors for a data type?

是否可以在 Haskell 中创建函数,其中 returns 数据类型的构造函数列表?

它应该像这样工作:

ghci> getConstructors Bool
[True, False]
ghci> getConstructors Maybe
[Nothing, Just]

想一想:列表的类型是什么? Nothing 的类型为 Maybe aJust 的类型为 a -> Maybe a.

不过你可以看看泛型。使用包 syb:

Prelude> import Data.Data
Prelude Data.Data> dataTypeConstrs $ dataTypeOf (Just 4)
[Nothing,Just]

请注意这里 [Nothing,Just] 只是它在屏幕上的打印方式,它实际上并不是包含两个构造函数的列表。

Prelude Data.Data> :t dataTypeConstrs (dataTypeOf (Just 4))
dataTypeConstrs (dataTypeOf (Just 4)) :: [Constr]

无论如何,拥有一个包含 [Nothing,Just] 的列表(即使 Haskell 是正确的)也没有多大用处。您将无法对其中的值执行任何操作,因为您不知道它们的类型。