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