如何将readProcess monad与Haskell中的where相结合?
下面的脚本是已发布和正在运行的脚本的扩展。添加的是对shell命令的调用如何将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
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!非常感谢你。请随意将其作为答案发布,以提高您的声誉。