haskell 中大小写匹配的替代函数
Alternative function for case match in haskell
我正在 Haskell 中编写一个 API,其中涉及数据库查询。
功能类似于执行数据库查询,然后 return 返回响应。
doAPICall :: Request -> (Monad m Response)
doAPICall req = do
maybeValDB <- getValFromDB (req.tokenId) -- Returns maybe type
-- My current logic was to do a case match of maybe
case maybeValDB of
Just val -> do
--Some logic here using that val and return the response
pure response
Nothing -> pure response
我目前正在从数据库查询函数中获取一个可能类型。有没有像单行代码这样的简单方法来避免这种情况匹配并将响应发回。
我想过使用 fromMaybe
但它的默认值应该具有相同的类型。在这种情况下,如果 db returns Nothing 我只想退出函数并做出一些响应。
一般来说,在很多情况下,我得到的响应可能是类型,我必须进行大小写匹配,代码看起来非常丑陋并且具有重复的模式。谁能告诉我更好的替代方案,而不是到处都匹配大小写。
也许您要找的是 maybe
?
doAPICall :: Request -> (Monad m Response)
doAPICall req = do
maybeValDB <- getValFromDB (req.tokenId)
flip (maybe $ pure response) maybeValDB $ \val -> do
-- Some logic here using that val and return the response
pure response
我正在 Haskell 中编写一个 API,其中涉及数据库查询。 功能类似于执行数据库查询,然后 return 返回响应。
doAPICall :: Request -> (Monad m Response)
doAPICall req = do
maybeValDB <- getValFromDB (req.tokenId) -- Returns maybe type
-- My current logic was to do a case match of maybe
case maybeValDB of
Just val -> do
--Some logic here using that val and return the response
pure response
Nothing -> pure response
我目前正在从数据库查询函数中获取一个可能类型。有没有像单行代码这样的简单方法来避免这种情况匹配并将响应发回。
我想过使用 fromMaybe
但它的默认值应该具有相同的类型。在这种情况下,如果 db returns Nothing 我只想退出函数并做出一些响应。
一般来说,在很多情况下,我得到的响应可能是类型,我必须进行大小写匹配,代码看起来非常丑陋并且具有重复的模式。谁能告诉我更好的替代方案,而不是到处都匹配大小写。
也许您要找的是 maybe
?
doAPICall :: Request -> (Monad m Response)
doAPICall req = do
maybeValDB <- getValFromDB (req.tokenId)
flip (maybe $ pure response) maybeValDB $ \val -> do
-- Some logic here using that val and return the response
pure response