fmap ( \eachSheet -> case (eachSheet ^. sProperties) of
  Just sheetProperties -> case (sheetProperties ^. sTitle) of
    Just sheets -> (sheetProperties ^. sSheetId)
    Nothing -> Nothing
  Nothing -> Nothing ) listOfSheets


任何更好的方式然后进行案例匹配

最佳答案

您在这里基本显示的是Maybe monad的用法,因此我们可以这样写:

fmap (\s -> (s ^. sProperties) >>= \sheetProperties -> (sheetProperties ^. sTitle) >> (sheetProperties ^. sSheetId)) listOfSheets


由于Maybe monad定义为:


instance Monad Maybe where
    return = Just
    (>>=) Nothing _ = Nothing
    (>>=) (Just x) f = f x



或者我们可以用do表示法编写它,尽管基本上是相同的:

fmap f listOfSheets
    where f eachSheet = do
        sheetProperties <- eachSheet ^. sProperties
        sheets <- sheetProperties ^. sTitle
        sheetProperties ^. sSheetId

07-27 13:42