假设我有某种类型
data Result = Fail | Success deriving (Show)
表示某些操作和另一个任意类型的结果
data MyData
和一些处理数据的功能
someAction :: MyData -> Result
someAction = if ... then Success else Fail
我需要一个包装函数 formatAction,它使用 MyData 调用 someAction 并使用 case 语句格式化处理结果。像这样:
formatAction :: MyData -> String
formatAction = let res = someAction in
case res of
Success -> "OK"
Fail -> "Fail"
这不是一个有效的代码,但我无法确定如何将函数的结果与"case"表达式一起使用。知道吗?
实际上我的意思是这样的一段代码:
data Result = Fail | Success
data SomeData = SDS | SDF
doSomeWork' :: SomeData -> Result
doSomeWork' SDS = Success
doSomeWork' _ = Fail
processData :: SomeData -> String
processData = let res = doSomeWork' in
case res of
Success -> "OK"
Fail -> "Fail"
它不会使用以下消息进行编译:
D:\Work\Haskell\revRange.hs:16:17: 无法匹配预期的类型 SomeData -> Result'
with actual type
结果' 在模式中:成功 在另一种情况下:成功 ->"确定" 在表达式中: 案例 { 成功 ->"OK" 失败 -> "失败" }D:\Work\Haskell\revRange.hs:16:28: 无法匹配预期的类型 SomeData -> String'
with actual type
[Char]' 在表达式中:"确定" 在另一种情况下:成功 ->"确定" 在表达式中: 案例 { 成功 ->"OK" 失败 -> "失败" }D:\Work\Haskell\revRange.hs:17:17: 无法匹配预期的类型 SomeData -> Result'
with actual type
结果' 在模式中:失败 在另一种情况下:失败 ->"失败" 在表达式中: 案例 { 成功 ->"OK" 失败 -> "失败" }D:\Work\Haskell\revRange.hs:17:25: 无法匹配预期的类型 SomeData -> String'
with actual type
[Char]' 在表达式中:"失败" 在另一种情况下:失败 ->"失败" 在表达式中: 案例 { 成功 ->"OK" 失败 -> "失败" }
只是无法掌握如何将结果与模式相匹配。
您可能需要添加函数参数
formatAction :: MyData -> String
formatAction d =
case someAction d of
Success -> "OK"
Fail -> "Fail"