5 Bullet Friday

Filed under: 5BF

Things that I learn about Haskell (and specifically front end web development with ReflexFRP) this week:

  • Functional Reactive Programming (FRP) is based on recognizing events, behaviors, and dynamics. ReflexFRP’s quickref page shows you how the functions look like, where t is the timeline of which events behaviors and dynamics happen. Of the other the 3, I’m still trying to sort out which is constant, which is reactive, and so on.
  • Reflex-Dom has a base unit so most of the functions require a ` return ()` to compile. The code basically says return an empty unit.. here are the main examples I’ve used this:
    elClass "div" "box"  return ()
    elClass "button" "widget"  text "Click me"
  • Variables are defined with let x = "value" whereas monads require binding with the left arrow, x <- somefunction
    let h = "Hello World"
    x <- elClass "div" "stylename"  text h 
  • If your Aeson hookup returns Nothing, double check the type definitions because variables may have been misspelled or needs to be a Maybe type (JSON can sometimes pass an empty string or null value. I blogged about this experience last year, but didn’t realize that misspelled variables names gives the same error!
  • In a do block of haskell code, you don’t have to explicitly define variable names for the last thing returned.
    a <- elDiv "parent"  do
        x <- elDiv "child"  return ()
        y <- elDiv "child"  return ()
        combineDyne (\x y -> customFunction x y) x y
    elDiv "parent"
        dynText a 

Acknowledgments

Many thanks for the Haskell engineers of a local haskell shop, Obsidian Systems for leading the Haskell Workshop on web development and also being available and encouraging when I ask naively-based questions.