haskell - Haskell 代数数据类型中的常量

标签 haskell constants algebraic-data-types

在 Haskell 代数数据类型中声明常量值是否合法?换句话说,我可以定义这样的东西吗:

data HttpStatusCodes = BadRequest "Bad request" 400
                     | NotAuthorized "Not authorized" 401
                     | -- ...

我试图从规范中弄清楚,但我不清楚语法。

最佳答案

不,你不能这样做(数据类型类型,而不是数据)。相反,您可以执行以下操作:

data HTTPStatus = HTTPStatus Int String

badRequest, notAuthorized, notFound :: HTTPStatus
badRequest    = HTTPStatus 400 "Bad Request"
notAuthorized = HTTPStatus 401 "Not Authorized"
notFound      = HTTPStatus 404 "Not Found"

或者,类似的:

data HTTPStatus = BadRequest | NotFound

code :: HTTPStatus -> Int
code BadRequest = 400
code NotFound = 404

message :: HTTPStatus -> String
message BadRequest = "Bad Request"
message NotFound = "Not Found"

关于haskell - Haskell 代数数据类型中的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13794132/

相关文章:

c++ - 如何初始化 const std::vector<MyClass>

optimization - 解包严格字段如何与多态性结合在一起?

c - haskell中的递归数据类型

python - Python 中的递归数据类型

haskell - 如何在守护进程模式下运行 Warp?

haskell - 为什么安全偏函数使用 Maybe 而不是泛化到任何 Monad

haskell - 在 happstack 中捕获纯函数的异常

c++ - C++ 对 static const 整数类型应用了哪些特殊规则?

haskell - Haskell SQLite 包之间的权衡是什么?

java - 如何在 Java 中输入常量作为输入