Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 为其中一个或单子做符号_Haskell - Fatal编程技术网

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
版本主要只是语法上的甜点),但我认为差别很小。