有一种方法:
import Control.Applicative ((<$>))
import Network.HTTP.Types
getJSON :: String -> IO (Either String Value)
getJSON url = eitherDecode <$> simpleHttp url
而不是这个:
method1 :: String -> IO Object
method1 url = do
maybeJson <- getJSON url
case maybeJson of
jsonValue ->
case jsonValue of
Object jsonObject -> return jsonObject
_ -> error "error123"
Left errorMsg -> error $ "error456"
我可以这样做:
method1 :: String -> IO Object
method1 url = do
Right jsonValue <- getJSON url
case jsonValue of
Object jsonObject -> return jsonObject
_ -> error "error123"
有没有办法在不使用像镜头这样的库的情况下进一步简化它?
答案 0 :(得分:4)
如果您不关心特定的错误消息,可以进一步合并模式:
method1 url = do
Right (Object jsonObject) <- getJSON url
return jsonObject