Haskell 为其中一个或单子做符号
有一种方法:Haskell 为其中一个或单子做符号,haskell,Haskell,有一种方法: import Control.Applicative ((<$>)) import Network.HTTP.Types getJSON :: String -> IO (Either String Value) getJSON url = eitherDecode <$> simpleHttp url import-Control.Applicative(()) 导入Network.HTTP.Types getJSON::String->IO(任
import Control.Applicative ((<$>))
import Network.HTTP.Types
getJSON :: String -> IO (Either String Value)
getJSON url = eitherDecode <$> simpleHttp url
import-Control.Applicative(())
导入Network.HTTP.Types
getJSON::String->IO(任意字符串值)
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对象
方法1 url=do
梅比森
案例jsonValue
对象jsonObject->返回jsonObject
_->错误“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"
method1::String->IO对象
方法1 url=do
右jsonValue返回jsonObject
_->错误“error123”
是否有任何方法可以在不使用任何库(如lens)的情况下进一步简化它?如果您不关心特定的错误消息,您可以进一步合并模式:
method1 url = do
Right (Object jsonObject) <- getJSON url
return jsonObject
method1 url=do
右(Object jsonObject)如果不关心特定的错误消息,可以进一步合并模式:
method1 url = do
Right (Object jsonObject) <- getJSON url
return jsonObject
method1 url=do
右(Object jsonObject)有没有任何方法可以像method1url=getjsonurl>>=return???
?这似乎有效method1url=getjsonurl>=\(右(Object jsonObject))->return jsonObject
@AlexanderSupertramp是的,我考虑过写这个(对它来说,do
版本主要只是语法上的甜点),但我认为差异很小。有没有办法做一些类似于method1url=getjsonurl>=return的事情?
?这似乎行得通method1url=getjsonurl>=\(右(objectjsonobject))->return jsonObject
@AlexanderSupertramp是的,我考虑过写它(对它来说,do
版本主要只是语法上的甜点),但我认为差别很小。