没有输入值的数据类型和多种原始类型

Data type without input value and multiple primitive types

首先,如果我要重复这个,我想道歉,但我到处搜索都没有找到问题的答案。

假设我有以下代码:

data TestType = Nothing | Int | Float deriving (Show)

jaykay :: TestType -> [Char]
jaykay Int = "This is an int"
jaykay Float = "This is float!"
jaykay a = "Nothing matched.."

main :: IO()
main = do
  jaykay [PLACE HOLDER]

很明显,这种类型没有任何值构造函数。所以我认为我可以在这里做的是从原始类型创建一个类型,该类型通常会保存定义中指定类型的任何值,对吗?我的问题是关于如何构建这种类型的实例,如果这个定义不正确,我将如何实现我之前描述的内容?

谢谢

实际上,您的类型 确实 有值构造函数 -- 实际上,其中三个名为 NothingIntFloat.因此,可以这样写,例如

main = putStrLn (jaykay Int)

和 运行 程序将打印出 This is an int。但是,我怀疑您希望您的构造函数接受相关类型的参数;所以你可能想写类似

的东西
data TestType = Nothing | Int Int | Float Float

以便使用 Int 构造函数构造的类型 TestType 的值将包含类型 Int 的附加值;同样,使用 Float 构造函数构造的那些将包含 Float 类型的值。 (N.B。这里有两个独立的命名空间!有一个类型级名称 Int 来自 Prelude,您现在还定义了一个值级 Int其类型为 Int -> TestType.)

使用这种更令人兴奋的新数据类型的示例如下:

jaykay (Int i) = "got the Int " ++ show i
jaykay (Float f) = "got the Float " ++ show f
jaykay a = "dunno lol"

main = putStrLn (jaykay (Int 3))

运行 这个程序会打印出 got the Int 3.