Functional Geekery Episode 124 – Sam Guyer and Caleb Helbling

In this episode I talk with Sam Guyer and Caleb Helbling. We talk about Juniper, a functional reactive programming language for Arduino programming.

Our Guests, Sam Guyer and Caleb Helbling

Sam Guyer
@CalebHelbling on Twitter

Conference Announcements

Monadic Party, a 5 day Haskell Summer School, will be taking place in Poznań, Poland the 11th-15th of June. Visit for more information and to register.

The 2018 Racket Summer School will run July 9th – 13th at the University of Utah, in Salt Lake City, Utah. For more information, and to apply visit

BusConf will take place for the second time from August 2nd to August 4th in Germany, close to Frankfurt. For more information and to register visit:

Compose::Melbourne will be taking place Monday August 27th. Visit to keep updated as more details are announced.

International Conference on Functional Programming 2018 will be taking place September 23 – 29th in St. Louis, MO. For more information, and to register visit:

StrangeLoop 2018 will be taking place September 27th and 28th, with a pre-conference day on the 26th in St. Louis, MO. To keep updated as details become announced you can find out more at:

(eighth RacketCon) will take place September 27th and 28th in St. Louis, Missouri, along side ICFP and Strange Loop. For more information, and to register visit

The Big Elixir Conference will be on November 8th and 9th in New Orleans. Visit for more information and to register.

If you have a conference related to functional programming, contact me, and I will be happy to announce it.


Some of you have asked how you can support Functional Geekery, in that vein,
Functional Geekery now has a Patreon Page.

If that is one of the ways you would like to show your support, you can
find out more at

Topics [@5:12]

About Sam and Caleb
Tufts University
How Sam and Caleb got into working with Arduinos
Juniper Paper
Addressable RGB LED strips
“There’s smoking coming out if it. Now it’s garbage.”
Pain of programming on an Arduino for those not familiar with C++
FastLED library
Concurrency and discrete event simulator
Going from feeling the pain to creating Juniper
Representing a Signal Graph
Elm Architecture
Maybe Types to represent Signal values
Reactive Programming model
Data Flow Model
Functional Reactive Programming
Using polling based model under the covers
Signal Graph as a mental model
Importance of Higher Order Functions on Signals
Writing Signal generation functions in C++
Ability to have multiple Signals propagating at the same time
Debouncing button press
Where Juniper fits today with an interrupt model
Writing Juniper in F#
Standard ML
Workflow from writing code to loading on an Arduino
C++ Templates
Debugging hardware vs software
Where Juniper is today
Problem with closures in embedded software with limited memory
How to get started with Juniper
Juniper Google Group
FastLED Google+

As always, a giant Thank You goes to David Belcher for the logo design.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.