使用case表达式将结果包装在Haskell中

时间:2016-03-18 16:09:15

标签: haskell

假设我有一些类型

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:\工作\ Haskell中\ revRange.hs:16:17:     无法匹配预期类型SomeData -> Result' with actual type结果'     在模式中:成功     在另一种情况下:成功 - > " OK"     在表达式中:       案例资源{         成功 - > " OK"         失败 - > "故障" } d:\工作\哈斯克尔\ revRange.hs:16:28:     无法匹配预期类型SomeData -> String' with actual type [字符]'     在表达式中:" OK"     在另一种情况下:成功 - > " OK"     在表达式中:       案例资源{         成功 - > " OK"         失败 - > "故障" } d:\工作\哈斯克尔\ revRange.hs:17:17:     无法匹配预期类型SomeData -> Result' with actual type结果'     在模式中:失败     在另一种情况下:失败 - > "故障"     在表达式中:       案例资源{         成功 - > " OK"         失败 - > "故障" } d:\工作\哈斯克尔\ revRange.hs:17:25:     无法匹配预期类型SomeData -> String' with actual type [字符]'     在表达式中:"失败"     在另一种情况下:失败 - > "故障"     在表达式中:       案例资源{         成功 - > " OK"         失败 - > "故障" }

无法理解如何将结果与模式相匹配。

1 个答案:

答案 0 :(得分:2)

您可能需要添加函数参数

formatAction :: MyData -> String
formatAction d = 
  case someAction d of 
    Success -> "OK"
    Fail -> "Fail"