在Yampa计划中获得" parse error on input ‘<-’ "



我一直在为一个类似马里奥的游戏编写主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来扩展功能。

我一直在寻找箭头"do"表示法中rec的帮助,我总是能找到同样的例子来强调正确的代码缩进。但我用Sublime缩进,间距对我来说很好。有其他方法吗?括号,花括号?任何东西

我注意到您正在使用制表符。我猜你的标签设置为4个空格?Haskell的选项卡总是设置为8个空格。可以将Sublime中的选项卡设置更改为8个空格,也可以将Sublme设置为将选项卡扩展到空格,这样就可以了。

(显然,您必须将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

相关内容

最新更新