为Either和Maybe monad做表示法

时间:2014-07-04 02:41:39

标签: 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"

有没有办法在不使用像镜头这样的库的情况下进一步简化它?

1 个答案:

答案 0 :(得分:4)

如果您不关心特定的错误消息,可以进一步合并模式:

method1 url = do
                Right (Object jsonObject) <- getJSON url
                return jsonObject