Functional Conf Day 1

Thu, Oct 9

    Registration - 30 mins


    Welcome Address - 15 mins


    Coffee/Tea Break - 15 mins


    Break - 15 mins


    Lunch Break - 60 mins

  • Added to My Schedule
    Premanand Chandrasekaran

    Functional Programming in Java

    schedule 02:00 PM - 03:00 PM place Grand Ball Room 1

    Functional programming has started (re)gaining prominence in recent years, and with good reason too. Functional programs lend an elegant solution to the concurrency problem, result in more modular systems, are more concise and are easier to test. While modern languages like Scala and Clojure have embraced the functional style whole-heartedly, Java has lagged a bit behind in its treatment of functions as first-class citizens. With the advent of Java 8 and its support for lambdas, however, Java programmers can finally start reaping the power of functional programs as well. Even without Java 8, it is possible to adopt a functional style with the aid of excellent libraries such as Guava.

    This talk will explore how to apply functional concepts using the Java programming language and demonstrate how it can result in simpler, more elegant designs. We will conduct this in a hands-on workshop style with attendants being encouraged to code-along. So bring your favorite Java 8 aware IDE, an open mind and prepare to have a lot of fun.

  • Added to My Schedule
    Thomas Gazagnaire

    Compile your own cloud with Mirage OS v2.0

    schedule 02:00 PM - 03:00 PM place Grand Ball Room 2

    Most applications running in the cloud are not optimized to do so. They make assumptions about the underlying operating system, resulting in larger footprints with increased costs and risks.  The open source Mirage OS represents a new approach where the application code is combined with the specific components of the operating system it needs into a single-purpose unikernel appliance. With Mirage OS, developers can create lean and efficient unikernels for secure, cost-effective and high-performance network applications. Mirage OS unikernels run directly on the Xen Project hypervisor, which allows them to be quickly deployed to many leading cloud platforms.

    Mirage OS is fully written in OCaml, from the device drivers and network stack to higher-level synchronisation protocols and databases. In this presentation I will explain how we developed Mirage OS and why we choose to do so in a strongly typed functional language with a powerful module langage. I will then present some of the new features of Mirage OS v2.0 such as: support for ARM devices, Irmin: a Git-like distributed database and OCaml-TLS: a comprehensive implementation of the TLS protocol in pure OCaml. 


    Coffee/Tea Break - 15 mins

  • Added to My Schedule
    Keith Bennett

    Functional Programming in Ruby

    schedule 03:15 PM - 04:00 PM place Grand Ball Room 1

    Although Ruby is not known as a functional language, it does support higher order functions in the form of lambdas and procs. Ruby's support for both object oriented and functional approaches, along with its conciseness, clarity, and expressiveness, make it an excellent choice as a general purpose programming language.

    This session, geared toward the functional novice, shows how to implement functional approaches in Ruby, and shows why you would want to.

    Topics covered will include:

    • in testing, using lambdas to verify that certain behaviors do or do not not raise errors
    • lambdas as predicates
    • deferred execution
    • composite functions
    • nested functions
    • using lambdas to hide variables
    • functions that return functions (partial application, currying)
    • lightweight event handling
    • chaining behavior with lambda arrays
    • how lambdas differ from conventional Ruby methods
  • Added to My Schedule
    Debasish Ghosh

    Property based testing for functional domain models

    schedule 03:15 PM - 04:00 PM place Grand Ball Room 2

    Manual testing is something that's error prone, incomplete and impossible to replicate on a large scale. We have instead been using xUnit style of testing for quite some time now. This approach has a number of drawbacks like (a) We need to write test cases by hand which again doesn't scale for large systems (b) We may miss out some of the edge cases (c) Safeguarding missing cases with coverage metrics doesn't help, since metrics are mostly based on heuristics (d) maintaining test cases and test data is a real pain.

    In property based testing we write properties and not low level test cases. And let the system generate test cases which validate such properties. There are 2 main advantages with this approach:

    1. You think in terms of properties (or specifications) of the domain model which is the right granularity to think about
    2. You don't need to manage test cases, which is completely done by the system that generates a large collection of test data

    This approach is ideal for the functional programming paradigm, which focuses on pure functions. Using functional programming it's easier to reason about your model - hence it's easier to test functional programs using properties. In this talk I will take some real world examples of property validation and verification using scalacheck (the property based testing library for Scala) and a real world domain model.


    Break - 15 mins


    Break - 15 mins

  • Added to My Schedule
    Naresha K

    Discovering Functional Treasure in Idiomatic Groovy

    schedule 05:30 PM - 06:15 PM place Grand Ball Room 1

    Groovy is a dynamic language on the JVM. Groovy supports programming in multiple paradigms - imperative, object oriented and even functional programming. 

    When I started using Groovy with Java background, the code used to be mostly imperative. As I explored the language in detail, I realized the power of idiomatic code. While the attempt to write idiomatic Groovy code helped me to realise the benefits of functional approach, thinking functionally resulted in better code too.

    In this talk, I will demonstrate functional programming constructs in Groovy and show how to use them effectively. I will provide plently of examples to help the audience realize the benefits.

  • Added to My Schedule
    Aditya Godbole

    Learning (from) Haskell - An experience report

    schedule 05:30 PM - 06:15 PM place Grand Ball Room 2

    Functional programming as a programming style and discipline is useful even in languages which are not pure functional languages. By practising programming in a pure functional language like Haskell, programmers can drastically improve the quality of code when coding in other languages as well.

    The talk is based on first hand experience of using Haskell in internal courses in our organisation to improve code quality.

    This talk will cover Gofer (one of the earliest variants of Haskell) as a teaching tool, including the choice of the language, the features from Haskell that should (and shouldn't) be covered and the obstacles and benefits of the exercise.



    Break - 15 mins


    Fish Bowl - 60 mins


    Dinner and Networking - 180 mins

Functional Conf Day 2

Fri, Oct 10

    Important Announcements - 15 mins


    Coffee/Tea Break - 15 mins

  • schedule 10:30 AM - 11:30 AM place Grand Ball Room 1

    LINQ draws on principles of functional programming and represents a paradigm shift for developers used to an imperative/object oriented programming style. Thinking in LINQ explains the benefits of functional programming built into LINQ, allowing developers to use these techniques write more efficient and concise data-intensive applications.

    While other books on the subject merely scratch the surface in terms of problem solving using LINQ, Thinking in LINQ ( shows readers how use functional programming techniques to solve common every-day problems as well as more complex problems using LINQ’s features.

    LINQ lets you write code that resembles natural language and is easier to debug compared to traditional loops and branching statements. The purpose of a well written LINQ Query will be immediately evident unlike the looping construct so commonly used in traditional programming. LINQ operators can be used in unison to orchestrate a solution for complex real world problems.

    What viewers will learn

    • Text Processing using LINQ
    • Refactoring using LINQ
    • Monitoring code health using LINQ
    • Creating DSL using LINQ
  • Added to My Schedule
    Morten Kromberg

    Pragmatic Functional Programming using Dyalog

    schedule 10:30 AM - 11:30 AM place Grand Ball Room 2

    APL is a member of the family of languages that are approaching middle age (Ken Iverson’s book titled “A Programming Language” was published in 1962). APL was very influential in the 60’s and 70’s, and widely used to deliver “end user computing” - but although the REPL, dynamic scope and lack of a type system endeared APL to domain experts, it also drew fire from computer scientists, most famously when Edsger Dijkstra declared that “APL is a mistake, carried through to perfection. It is the language of the future for the programming techniques of the past it creates a new generation of coding bums.”

    Dyalog is a modern, array-first, multi-paradigm programming language, which supports functional, object-oriented and imperative programming based on an APL language kernel. Dyalog allows people with good ideas – from bright high school students to PhDs – to contribute directly to the software development process using a notation which fits comfortably with those used in their own domains. Subject matter experts can write prototypes or, with suitable training and/or support, highly efficient, parallel and robust code that can be embedded in high-performance production applications.


    Break - 15 mins

  • Added to My Schedule
    Bhasker Kode

    Writing and improving tail recursive functions

    schedule 11:45 AM - 12:30 PM place Grand Ball Room 1

    Brief history of recursion 

    Snippets from a few languages

    What is tail recursion?

    Design choices around recursion

    The importance of tail recursion in erlang

    How do you profile such improvements?




  • Added to My Schedule
    Tejas Dinkar

    Monads you already use (without knowing it)

    schedule 11:45 AM - 12:30 PM place Grand Ball Room 2

    Monads are a little bit like Quantum Physics: If you think you understand quantum mechanics, you don't understand quantum mechanics.

    Monads are very useful for chaining computation together, in a simple way. The best explanation I've heard for them so far is that they are `programmable semicolons'.

    In this session, I'll describe a few patterns that are solved by monads in some FP languages, and how you are already using them.

    Some monads I plan to cover:

    * Maybe Monad (being the easiest to explain)

    * List monad, and how it is used to model non-determinism

    * The state monad

    * The IO monad

    And maybe a few others


    Lunch Break - 60 mins

  • Added to My Schedule
    Mohit Thatte

    Purely functional data structures demystified

    schedule 01:30 PM - 02:15 PM place Grand Ball Room 1

    Immutable, persistent data structures form a big part of the value proposition of most functional programming languages.

    It is important to understand why these data structures are useful and how they make it easier to reason about your program. 

    It is also instructive to see how these data structures are implemented to get a greater appreciation for the inherent tradeoffs between performance and immutability.

    In this talk I will do a walkthrough of some of these data structures drawing from the work of Chris Okasaki[1], and attempt to explain the essential ideas in a simple way. 

    [1] Purely Functional Data Structures, Chris Okasaki, School of Computer Science, Carnegie Mellon University 

  • Added to My Schedule
    Ryan Lemmer

    Realtime Distributed computing: dealing with Time and Failure in the wild

    schedule 01:30 PM - 02:15 PM place Grand Ball Room 2

    There is a growing need for scalable, realtime business systems that are continuously running and highly-available. Two very different frameworks/approaches you could use to build such systems are Storm and Akka.

    Systems created with Storm or Akka are distributed, at runtime, on as many machines as you choose. The inherent concurrency implied by this brings the issues of State, Time and Failure into sharp focus. Functional programming has much to say about dealing with state and time; not surprisingly, both Storm and Akka have strong roots in functional languages (for Storm it is Clojure, and for Akka, Scala).

    In this talk we'll explore the core concepts and challenges of distributed computation; the role of functional programming in concurrent distributed computing; we'll take a look at Storm and Akka, by example, and see that as different as these 2 approaches are, the underlying difficulties of distributed computation remains evident in both: dealing with time, and dealing with failure.


    Break - 15 mins

  • Added to My Schedule
    Ramakrishnan Muthukrishnan

    An introduction to Continuation Passing Style (CPS)

    schedule 02:30 PM - 03:30 PM place Grand Ball Room 1

    Traditionally functions return some value. Someone is waiting for that value and does some computation with it. This "someone" is called the continuation of this value. In a normal functional call, the continuation is "implicit". In the "continuation passing style" (hence forth called with the short form, CPS), we make the continuations explicit. In this style, function definitions take an extra argument called "continuation" and it never return. The "return value" of the function 'continues' by passing this value as an argument to the continuation. Continuations are sometimes called "gotos with arguments".

    CPS is used as an intermediate stage while compiling a program since it makes the control structure of the program explicit and hence can be converted easily to machine code. Another feature of a CPS-transformed function is that it is tail-recursive even if the original function was not written in a tail-recursive style.

    Continuations enable a programmer to build new control operators (if the language's built-in operators does not already provide the control operators the programmer need).

  • schedule 02:30 PM - 03:30 PM place Grand Ball Room 2

    Sync, Async, Blocking, Non-Blocking, Streaming are the buzzwords in the reactive programming world. This talk will attempt to attach some meaning to them. It will also demo the performance and resource consumption patterns for blocking-io, Scala Futures and RxJava Observables for comparable programs. Finally, a command line application that consumes twitter streams API will demo what is possible using the new reactive abstractions.


    Coffee/Tea Break - 15 mins

  • Added to My Schedule
    Akash Manohar

    Elixir Today: a round-up on state of Elixir and it's ecosystem

    schedule 03:45 PM - 04:45 PM place Grand Ball Room 1

    Elixir is a functional and dynamic language built on top of the Erlang VM. The development of the language is happening at a fast pace. People in the community have participated actively to write tools and libraries, required to write real-world apps in Eilxir.

    In this talk, I will attempt to skim through all the new features in Elixir, a few important libraries with short examples and some learning resources.

    Each tool showcased in this talk, will have a 3-step tryout, with the simplest example.

  • Added to My Schedule
    Rahul Goma Phulore

    Object-functional programming: Beautiful unification or a kitchen sink?

    schedule 03:45 PM - 04:45 PM place Grand Ball Room 2

    Scala began its life as an experiment to “unify” object-oriented programming and functional programming. Martin Odersky believed that the differences between FP and OO are more cultural than technical, and that there was a room for beautifully unify various ideas from the two into one simple core.

    How successful has Scala been in its goals? Is it the like “the grand unified theory of universe” or like the infamous “vegetarian ham”? [1]

    In this talk, we will see just how Scala unifies various ideas – such as type-classes, algebraic data types, first-class modules, functions under one simple core comprising of traits, objects, implicits, and open recursion. We will how this unification unintendedly subsumes many concepts that require seprate features in other languages, such as functional dependencies, type families, GADTs in Haskell. We will see how this has given a rise to a new “implicit calculus”, which could lay a foundation for next generation of generic programming techniques.

    We will see that this unification comes at a certain cost, wherein it leads to some compromises on both sides. However many of these trade-offs are particular to Scala (largely due to the JVM imposed restrictions). The goal of unification is still noble, and we need not throw the baby out with the bathwater.



    Break - 15 mins


    Closing Talk - 15 mins