Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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
如何将readProcess monad与Haskell中的where相结合?_Haskell_Monads - Fatal编程技术网

如何将readProcess monad与Haskell中的where相结合?

如何将readProcess monad与Haskell中的where相结合?,haskell,monads,Haskell,Monads,下面的脚本是已发布和正在运行的脚本的扩展。添加的是对shell命令的调用curl #!/usr/bin/env runhaskell -- svgtex.hs import Text.Pandoc.JSON import System.Process curl latex = readProcess "curl" ["-d", "type=tex&q=" ++ latex, "http://localhost:16000"] "" main = toJSONFilter svgtex

下面的脚本是已发布和正在运行的脚本的扩展。添加的是对shell命令的调用
curl

#!/usr/bin/env runhaskell
-- svgtex.hs
import Text.Pandoc.JSON
import System.Process

curl latex = readProcess "curl" ["-d", "type=tex&q=" ++ latex, "http://localhost:16000"] ""

main = toJSONFilter svgtex
  where svgtex (Math style latex) = do
            svg <- curl latex
            return (Math style (svg))
        svgtex x = x
尽管跳过了一些在线Haskell教程和StackExchange Q&a,但我仍然没有完全理解monads的概念。因此,对于以上脚本中所有错误的详细解释将不胜感激

问题在于:

    svgtex x = x
编者抱怨说

Couldn't match expected type `IO Inline' with actual type `Inline'
因为
x
是一个
Inline
,而
svgtex
必须返回一个
IO Inline
。要将
x
注入
IO
monad,只需使用
return
函数即可

    svgtex x = return x
要完全理解正在发生的事情,请参阅任何monad教程(或LYAH)。粗略地说,类型为
ioinline
的值表示可以执行任意数量的I/O并最终返回类型为
Inline
的值的操作。
return
函数用于将纯值转换为伪
IO
操作,该操作不执行任何I/O操作,只返回结果。

问题在于:

    svgtex x = x
编者抱怨说

Couldn't match expected type `IO Inline' with actual type `Inline'
因为
x
是一个
Inline
,而
svgtex
必须返回一个
IO Inline
。要将
x
注入
IO
monad,只需使用
return
函数即可

    svgtex x = return x
要完全理解正在发生的事情,请参阅任何monad教程(或LYAH)。粗略地说,类型为
ioinline
的值表示可以执行任意数量的I/O并最终返回类型为
Inline
的值的操作。
return
函数用于将纯值转换为伪
IO
操作,该操作不执行任何I/O操作,只返回结果。

问题在于:

    svgtex x = x
编者抱怨说

Couldn't match expected type `IO Inline' with actual type `Inline'
因为
x
是一个
Inline
,而
svgtex
必须返回一个
IO Inline
。要将
x
注入
IO
monad,只需使用
return
函数即可

    svgtex x = return x
要完全理解正在发生的事情,请参阅任何monad教程(或LYAH)。粗略地说,类型为
ioinline
的值表示可以执行任意数量的I/O并最终返回类型为
Inline
的值的操作。
return
函数用于将纯值转换为伪
IO
操作,该操作不执行任何I/O操作,只返回结果。

问题在于:

    svgtex x = x
编者抱怨说

Couldn't match expected type `IO Inline' with actual type `Inline'
因为
x
是一个
Inline
,而
svgtex
必须返回一个
IO Inline
。要将
x
注入
IO
monad,只需使用
return
函数即可

    svgtex x = return x

要完全理解正在发生的事情,请参阅任何monad教程(或LYAH)。粗略地说,类型为
ioinline
的值表示可以执行任意数量的I/O并最终返回类型为
Inline
的值的操作。
return
函数用于将纯值转换为伪
IO
操作,该操作不执行任何I/O操作,只返回结果。

请尝试
svgtex x=return x
@chi!非常感谢你。请随意将其作为答案发布,以提高您的声誉。请尝试
svgtex x=return x
@chi!非常感谢你。请随意将其作为答案发布,以提高您的声誉。请尝试
svgtex x=return x
@chi!非常感谢你。请随意将其作为答案发布,以提高您的声誉。请尝试
svgtex x=return x
@chi!非常感谢你。请随意将其作为答案发布,以提高您的声誉。