#haskell
#haskell
Вопрос:
Существует метод:
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"
Есть ли какой-либо способ упростить это еще больше без использования каких-либо библиотек, таких как lens?
Ответ №1:
Если вас не волнуют конкретные сообщения об ошибках, вы могли бы объединить шаблоны дальше:
method1 url = do
Right (Object jsonObject) <- getJSON url
return jsonObject
Комментарии:
1. есть ли какой-нибудь способ сделать что-то вроде
method1 url = getJSON url >>= return ???
?2. кажется, это работает
method1 url = getJSON url >>= (Right (Object jsonObject)) -> return jsonObject
3. @AlexanderSupertramp Да, я подумывал написать это вместо (
do
версия в основном представляет собой просто синтаксический сахар для этого), но решил, что разница невелика.