Señales mutuamente dependientes

Pregunta desnuda:

¿Hay alguna forma de definir un par de señales que dependen unas de otras en Elm?

Preámbulo:

Estoy tratando de escribir un pequeño juego de navegador estilo Cookie-clicker en el que el jugador reúne recursos, luego los gasto para comprar construcciones autónomas de recolección de recursos que se vuelven más caras a medida que se compran. Eso implica tres señales relevantes:gathered (cuántos recursos ha reunido el jugador),spent (cuánto recurso ha gastado el jugador) ycost (cuánto cuesta una actualización).

Aquí hay una implementación:

module Test where

import Mouse
import Time

port gather : Signal Bool
port build : Signal String

costIncrement = constant 50
cost = foldp (+) 0 <| keepWhen canAfford 0 <| sampleOn build costIncrement
nextCost = lift2 (+) cost costIncrement

spent = foldp (+) 0 <| merges [ sampleOn build cost ]

gathered = foldp (+) 0 <| merges [ sampleOn gather <| constant 1, sampleOn tick tickIncrement ]

balance = lift round <| lift2 (-) gathered spent

canAfford = lift2 (>) balance <| lift round nextCost

tickIncrement = foldp (+) 0 <| sampleOn cost <| constant 0.01
tick = sampleOn (every Time.millisecond) <| constant True

main = lift (flow down) <| combine [ lift asText balance, lift asText canAfford, lift asText spent, lift asText gathered, lift asText nextCost ]

Esto se compila bien, pero cuando lo incrusto en un archivo HTML con los botones apropiados conectados para enviar mensajes a los puertos apropiados arriba, aparece el error

s2 is undefined
    Open the developer console for more details.

El problema parece ser que, como está escrito,cost depende decanAfford, que depende debalance, que depende despent, que depende decost de nuevo.

Si modifico la línea de costo de modo que

...
cost = foldp (+) 0 <| sampleOn build costIncrement
...

comienza a funcionar como se esperaba (excepto que el jugador puede gastar en recursos negativos, que es lo que me gustaría evitar).

¿Algunas ideas?

Respuestas a la pregunta(1)

Su respuesta a la pregunta