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

Net*_*tsu 2 haskell functional-programming dynamic-programming template-haskell

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

它应该像这样工作:

ghci> getConstructors Bool
[True, False]
ghci> getConstructors Maybe
[Nothing, Just]
Run Code Online (Sandbox Code Playgroud)

tho*_*ron 14

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

你可以看一下泛型.使用包syb:

Prelude> import Data.Data
Prelude Data.Data> dataTypeConstrs $ dataTypeOf (Just 4)
[Nothing,Just]
Run Code Online (Sandbox Code Playgroud)

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

Prelude Data.Data> :t dataTypeConstrs (dataTypeOf (Just 4))
dataTypeConstrs (dataTypeOf (Just 4)) :: [Constr]
Run Code Online (Sandbox Code Playgroud)

无论如何,有一个列表[Nothing,Just](即使这是正确的Haskell)将不会真正有用.您将无法对其中的值执行任何操作,因为您不知道它们的类型.