没有输入值的数据类型和多种原始类型
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]
很明显,这种类型没有任何值构造函数。所以我认为我可以在这里做的是从原始类型创建一个类型,该类型通常会保存定义中指定类型的任何值,对吗?我的问题是关于如何构建这种类型的实例,如果这个定义不正确,我将如何实现我之前描述的内容?
谢谢
实际上,您的类型 确实 有值构造函数 -- 实际上,其中三个名为 Nothing
、Int
和 Float
.因此,可以这样写,例如
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
.
首先,如果我要重复这个,我想道歉,但我到处搜索都没有找到问题的答案。
假设我有以下代码:
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]
很明显,这种类型没有任何值构造函数。所以我认为我可以在这里做的是从原始类型创建一个类型,该类型通常会保存定义中指定类型的任何值,对吗?我的问题是关于如何构建这种类型的实例,如果这个定义不正确,我将如何实现我之前描述的内容?
谢谢
实际上,您的类型 确实 有值构造函数 -- 实际上,其中三个名为 Nothing
、Int
和 Float
.因此,可以这样写,例如
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
.