【发布时间】:2015-11-29 14:29:57
【问题描述】:
我得到了如下的数据类型
data Value = IntVal Integer |
BoolVal Bool
deriving Show
我正在尝试编写一个函数getVal,它接受一个值并返回内部的实际值。我试图通过模式匹配来实现
getVal (IntVal val) = val
getVal (Bool bool) = bool
但是 Haskell 抱怨返回类型 无法将预期类型“整数”与实际类型“布尔”匹配
所以我给它一个签名返回一个类型变量
getVar :: Value -> a
但这也行不通
【问题讨论】:
-
您希望如何使用该功能
getVar? -
@Bergi 这个函数的实际逻辑比这更复杂,我只是想在继续之前至少获得输入和输出格式
-
@Bergi 如果考虑到类型推断,它确实是有意义的。请参阅我的答案中的示例
-
不,我不是说函数本身的逻辑,这无关紧要。但是你觉得你会怎么打电话给
getVar? -
@behzad.nouri:是的,但是您已将结果类型更改为
Maybe,这样在输入意外时它可能会失败。
标签: haskell functional-programming polymorphism