我一直在为主要的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 -< cgg
这是解析并执行ok的代码:
mainSF = parseInput >>> master_combine >>> draw
请注意,我在同一个代码块中保留了两个版本并带有注释,以使差异更明显。
原则上我想创建一个具有小延迟的负反馈循环,以便我可以通过转换后的游戏而不必切换功能。输出转到这样的“绘制”SF:
HT100
HT101
HT102
在第一个版本中,我尝试使用中间名称gs(游戏状态)和dgs(延迟游戏状态)。错误在以dgs开头的行上发出信号。
在第二个版本中,那个适合我的版本,我必须在一行中写下整个SF。
我想使用代码的第一个版本,因为我需要通过连接暗示负反馈循环的其他SF来扩展功能。
我一直在使用箭头“do”表示法搜索rec的帮助,我总是找到强调正确代码缩进的相同示例。但我用Sublime缩进,间距看起来很好。还有另外一种方法吗?括号,花括号?什么?
答案 0 :(得分:3)
我注意到您正在使用标签页。我猜你的标签设置为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