module mutual import StdEnv import StdHtml derive gForm Pounds, Euros derive gUpd Pounds, Euros derive gPrint Pounds, Euros derive gParse Pounds, Euros derive gerda Pounds, Euros :: Pounds = {pounds :: Real} :: Euros = {euros :: Real} Start world = doHtmlServer mutual world myEuroId :: (FormId Euros) myEuroId = nFormId "euros" initEuros myPoundsId :: (FormId Pounds) myPoundsId = nFormId "pounds" {pounds = 0.0} initEuros = {euros = 0.0} mutual hst # (mutual,hst) = startCircuit circuit initEuros hst = mkHtml "Mutual Recursive Form" [ H1 [] "Example of a Mutual recursive form" , toBody mutual ] hst where circuit :: GecCircuit Euros Euros circuit = feedback (edit myEuroId) (arr toPounds >>> edit myPoundsId >>> arr toEuros) toPounds :: Euros -> Pounds toPounds {euros} = {pounds = euros / exchangerate} toEuros :: Pounds -> Euros toEuros {pounds} = {euros = pounds * exchangerate} exchangerate = 1.4