2014-07-10 37 views
3

有沒有一種更清潔的方式來編寫與其他生產清單Maybe s?如何減少樣本處理Maybe和列表?

import Text.Feed.Query (getItemLink, getFeedItems) 

s = getFeedItems >=> (maybeToList . getItemLink) 
+1

您可以使用[mapMaybe](http://hackage.haskell.org/package/base-4.7.0.0/docs/Data-Maybe.html#v:mapMaybe)或[catMaybes](http:// hackage .haskell.org/package/base-4.7.0.0/docs/Data-Maybe.html#v:catMaybes)從'Data.Maybe'。 –

+5

樣板在哪裏? –

+4

@NikitaVolkov Haskell中只有40個非空白字符被認爲是樣板文件。除了bennofs設法把它降低到33個字符,這是整個7個字節的節省! – bheklilr

回答

2

您可以使用mapMaybe :: (a -> Maybe b) -> [a] -> [b]Data.Maybe

s = mapMaybe getItemLink . getFeedItems 

該模塊還包含另一個有用的功能,catMaybes

catMaybes :: [Maybe a] -> [a] -- filter out all the Nothings 

列表理解也是在這種情況下是有用的,但更詳細:

s feed = [ itemLink | Just itemLink <- map getItemLink (getFeedItems feed) ] 
-- s feed = [ itemLink | item <- getFeedItems feed, Just itemLink <- return item ]