haskellfrpthreepenny-gui

Element from Behavior (Functional Reactive Programming)


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.


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.