有没有更好的方法在 Idris 中编写嵌套案例?

问题描述

这是 Edwin 书中的一段 Idris 代码:

data DataStore : Type where
  MkData : (size : Nat) ->
           (items : Vect size String) ->
           DataStore

proccessInput : DataStore -> String -> Maybe (String,DataStore)
proccessInput store@(MkData size items) input =
  case map trim $ span (/= ' ') input of
    ("add",item) => Just ("ID " ++ show size ++ "\n",MkData _ (item :: items))
    ("get",val) => case all isDigit (unpack val) of
      False => Just ("Invalid command\n",store)
      True => case integerToFin (cast val) size of
        Nothing => Just ("Out of range\n",store)
        (Just id) => Just (index id items ++ " \n",store)
    ("quit","") => Nothing
    (_,_) => Just ("Invalid command\n",store)

我已经删除了一些我认为多余的代码(一些辅助函数),但我仍然发现代码有些多余。我认为案例拆分真的很难看。

解决方法

模式匹配绑定是一种方便的符号,用于处理可能失败的操作序列,这可能有助于减少嵌套 case 块的某些最近性。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...