在 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
我一直在为我为娱乐而编写的类似马里奥的游戏编写主要 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