Question

I'm just trying to get started with FRP and threepenny-gui, and I'm not sure how to do even basic things.

Suppose I have a function defined as so

timesClicked :: Element -> Behavior Int
timesClicked elem = accumulate (+) 0 (1 <$ UI.click elem)

and I want to display the value of the Behavoir on the page.

I can do something like

setup :: Window -> UI ()
setup rootWindow = void $ do
  button <- UI.button #+ [ string "Clickity!" ]
  output <- UI.p
  getBody rootWindow #+
    map element [ button, output ]

  let clicks = timesClicked loginButton

Edit: Working full code here.

I don't know how to attach the behavior into the output.

Was it helpful?

Solution

Aha, I've got it figured out now, and am leaving this as an example for anyone else.

timesClicked elem = accumB (0::Int) ( (+1) <$ UI.click elem)


setup :: Window -> UI ()
setup rootWindow = void $ do
  button <- UI.button #+ [ string "Clickity!" ]
  output <- UI.p
  getBody rootWindow #+
    map element [ button, output ]

  clicks <- timesClicked button
  -- sink :: ReadWriteAttr x i o -> Behavior i -> UI x -> UI x
  element output # sink text (show <$> clicks)

If anyone wants to follow along with my progress, I've put it on github.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top