在 Yampa 程序中出现“输入‘<-’时出现解析错误”

Getting " parse error on input ‘<-’ " within a Yampa program

我一直在为我为娱乐而编写的类似马里奥的游戏编写主要 SF。 这是不解析的代码:

master_combine = proc pi -> do 
                            -- rec cgg <- player_update >>> (initial_game --> bounds_updater) >>> iPre initial_game -< (pi, cgg)
                            rec gs  <- player_update >>> (initial_game --> bounds_updater) -< (pi, dgs)
                                dgs <- iPre initial_game -< gs
                            returnA -< gs

这是解析和执行ok的代码:

master_combine = proc pi -> do 
                            rec cgg <- player_update >>> (initial_game --> bounds_updater) >>> iPre initial_game -< (pi, cgg)
                            -- rec gs  <- player_update >>> (initial_game --> bounds_updater) -< (pi, dgs)
                            --  dgs <- iPre initial_game -< gs
                            returnA -< cgg

请注意,我在同一个代码块中保留了两个版本并带有注释以使差异更加明显。

原则上我想创建一个带有小延迟的负反馈循环,这样我就可以传递转换后的游戏而不必切换功能。输出到 "draw" SF,如下所示:

mainSF = parseInput >>> master_combine >>> draw

在第一个版本中,我尝试使用中间名称 gs(游戏状态)和 dgs(延迟游戏状态)。错误在以 dgs.

开头的行上发出信号

在第二个版本中,对我有用的那个,我不得不在一行中写下整个 SF。

我想使用第一个版本的代码,因为我需要通过连接额外的 SF 来扩展功能,这意味着负反馈循环。

我一直在寻找关于 rec in Arrow "do" notation 的帮助,我总能找到强调正确代码缩进的相同示例。但是我用 Sublime 缩进,间距对我来说很好。还有别的办法吗?括号,大括号?有什么吗?

我注意到您正在使用制表符。我猜你的制表符设置为 4 个空格? Haskell 的制表符始终设置为 8 个空格。要么将 Sublime 中的制表符设置更改为 8 个空格,要么将 Sublime 设置为将制表符扩展为空格,它应该可以工作。

(显然您必须将 dgs 之前的制表符更改为四个空格)。

另一种选择是在 rec 之后放置一个换行符(和缩进),在这种情况下,您的制表符的长度并不重要(因为您在使用制表符方面保持一致):

master_combine = proc pi -> do 
                            -- rec cgg <- player_update >>> (initial_game --> bounds_updater) >>> iPre initial_game -< (pi, cgg)
                            rec
                                gs  <- player_update >>> (initial_game --> bounds_updater) -< (pi, dgs)
                                dgs <- iPre initial_game -< gs
                            returnA -< gs