haskell如何使用先前指定的变量

haskell如何使用先前指定的变量,haskell,haskell-platform,Haskell,Haskell Platform,如果我正确地阅读了您的问题和注释,而您只想在func1中使用func a的值,那么如何首先使用分配给a的变量。。你尝试了命令式风格,但注意到这只适用于IO单子 在这种情况下,让我们非常接近: do b <- func a c <- func1 b func2 c 但在哈斯凯尔,我们通常用构图来代替: myResult a = let b = func a c = func1 b in func2 c 那是 my

如果我正确地阅读了您的问题和注释,而您只想在func1中使用func a的值,那么如何首先使用分配给a的变量。。你尝试了命令式风格,但注意到这只适用于IO单子

在这种情况下,让我们非常接近:

    do
      b <- func a
      c <- func1 b
      func2 c
但在哈斯凯尔,我们通常用构图来代替:

myResult a =
   let b = func a
       c = func1 b
   in func2 c
那是

myResult a = func2 (func1 (func a))
最后,您可以删除点a以获得无点样式:


如果您喜欢

经验法则是,您必须查看函数的类型


当函数返回IO或您正在使用的任何monad时,请使用我不确定您希望代码执行的操作–您的问题不清楚。你能详细说明一下吗,也许能达到预期的效果?与此相关的是,您的代码当前没有进行类型检查;如果没有func、func1和func2的类型以及整个do块的预期类型,则无法回答此问题。你说它不起作用是什么意思?例如,如果func=return,func1=return,则该选项有效。反向,func2=putStrLn,a=Hello,world!——它打印出来了!德洛,奥利。听起来你好像遇到了一个打字问题,这意味着我们需要看到没有进行打字检查的特定代码,以便提供帮助。查看一些漂亮的图片和解释。我必须使用b为什么你必须使用这个?
myResult a = func2 (func1 (func a))
myResult a = func2 . func1 . func $ a
myResult = func2 . func1 . func
do
  b <- func a
  c <- func1 b
  func2 c
do  -- do is not really necessary here... but let's play along
  let b = func a
  let c = func1 b
  func2 c
do
  b <- func a
  let c = func1 b
  func2 c