Functional programming 在PureScript中找不到'do'块中的变量

Functional programming 在PureScript中找不到'do'块中的变量,functional-programming,purescript,Functional Programming,Purescript,这不起作用: itAsync "subscribeEventedOn should receive any attached data" $ \done -> do w <- getWindow subscribeEventedOn "foo" (\event -> do fprint event expect (unwrapDetail event) `toDeepEqual` d' itIs done ) w emitOn

这不起作用:

itAsync "subscribeEventedOn should receive any attached data" $ \done -> do      
  w <- getWindow
  subscribeEventedOn "foo" (\event -> do
    fprint event
    expect (unwrapDetail event) `toDeepEqual` d'
    itIs done
  ) w
  emitOn sampleEvent w
  expect true `toEqual` true
itAsync“subscribeEventedOn应接收任何附加数据”$\done->do
w多
fprint事件
expect(unwrapDetail事件)`toDeepEqual`d'
完成了
)w
emitOn采样事件w
期待真实的‘toEqual’真实
未知值“w”

但这确实有效:

w <- getWindow
itAsync "subscribeEventedOn should receive any attached data" $ \done -> do      
  subscribeEventedOn "foo" (\event -> do
    fprint event
    expect (unwrapDetail event) `toDeepEqual` d'
    itIs done
  ) w
  emitOn sampleEvent w
  expect true `toEqual` true
w do
订阅“foo”(\event->do)
fprint事件
expect(unwrapDetail事件)`toDeepEqual`d'
完成了
)w
emitOn采样事件w
期待真实的‘toEqual’真实

为什么??这对我来说没有意义。(顺便说一句,我在单元测试中嵌套了
do
块)

我能够通过猜测示例代码中的名称类型来重现这一点,看起来这是由PureScript lexer的特性造成的。您可以通过将结束参数向上移动到上面的行来修复它:

itAsync "subscribeEventedOn should receive any attached data" $ \done -> do      
  w <- getWindow
  subscribeEventedOn "foo" (\event -> do
    fprint event
    expect (unwrapDetail event) `toDeepEqual` d'
    itIs done) w
  emitOn sampleEvent w
  expect true `toEqual` true
itAsync“subscribeEventedOn应接收任何附加数据”$\done->do
w多
fprint事件
expect(unwrapDetail事件)`toDeepEqual`d'
完成后)w
emitOn采样事件w
期待真实的‘toEqual’真实

Trippy。你想让我提交一个问题吗?我怀疑如果我们切换到purescript中purescript实现的lexer的更新版本,这种问题就会得到解决。