在IO块中简化可能monad

时间:2014-07-21 07:39:28

标签: haskell

说我有一个功能:

get :: String -> Maybe [(C8.ByteString, Maybe C8.ByteString)] -> IO (Response LC8.ByteString)
get url qParams' = do
  request <- parseUrl url

  --todo simplify
  let qParams = case qParams' of
                  Just p -> p
                  Nothing -> [] 

  res <- withManager $ httpLbs $ configRequest request qParams
  return res

我相信有一种方法可以简化let qParams = ...表达式。但我不知道。我可以用   Just qParams <- qParams'如果它是可能monad,但它是IO monad所以我不能使用它。

你的想法?

2 个答案:

答案 0 :(得分:9)

使用maybe功能:

let qParams = maybe [] id qParams'

或者@MichaelSnoyman建议你可以使用fromMaybe

let qParams = fromMaybe [] qParams'

答案 1 :(得分:4)

您还可以使用fold中的Data.Foldable

let qParams = fold qParams'