Functional programming 是否有更好的方法在Idris中编写嵌套案例?

Functional programming 是否有更好的方法在Idris中编写嵌套案例?,functional-programming,idris,Functional Programming,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

以下是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)

我已经消除了一些我认为是多余的代码(一些助手函数),但我仍然发现这些代码有些多余。我认为大小写拆分非常难看。

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