将大小写表达式包装在 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:\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"

最新更新