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 a但Just有类型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)将不会真正有用.您将无法对其中的值执行任何操作,因为您不知道它们的类型.