Haskell - 如何使用< - 在where子句中

Yah*_*din 7 haskell

我有以下代码:

foo :: Int -> IO ()
foo n = do
    x <- bar 6
    print "foo running..."
    print x


bar :: Int -> IO Int
bar n = do
    print "bar running..."
    return (n*2)
Run Code Online (Sandbox Code Playgroud)

现在我想将"x < - bar 6"部分放在where子句中,如下所示:

foo :: Int -> IO ()
foo n = do
    print "foo running..."
    print x
    where
        x <- bar 6

bar :: Int -> IO Int
bar n = do
    print "bar running..."
    return (n*2)
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

Dav*_*vid 15

这是不允许的.一个where条款没有强制执行评估订单,这对于大多数Monad来说是必需的,例如IO.如果这是可能的,何时会bar 6相对于两个prints 执行?它会在一开始还是在它们之间?


Sho*_*hoe 5

我该怎么做呢?

这没有意义.对不起.

以下是一个do块:

a <- b
c
Run Code Online (Sandbox Code Playgroud)

相当于:

b >>= (\a -> c)
Run Code Online (Sandbox Code Playgroud)

如此a <- b孤独,将等同于:b >>= (\a ->)这是一个语法错误.

无论如何,您无需存储xwhere子句中.在你的程序中:

foo :: Int -> IO ()
foo n = do
    x <- bar 6
    ...
Run Code Online (Sandbox Code Playgroud)

之后x <- bar 6,您可以xdo块内的任何地方重复使用.