The Core of Streaming

Presented on November 12, 2024 at Brisbane Functional Programming Group
Slides

Streaming libraries are as important in Haskell as they are in other languages — they let you process large amounts of data in constant memory. streaming is my favourite of these, because it has a very elegant core type and doesn’t invent a plethora of custom operators. In this talk, I will motivate and build up the core types used by the streaming library, and show that not only do they enable safe and efficient streaming, they are also surprisingly expressive.

Everything Looks like a Function

Presented on February 21, 2023 at Brisbane Functional Programming Group
Slides

I’ve started noticing many pieces of data in my programs that basically serve as functions: a data type like data Match a = Anything | This a can be interpreted as a subset of functions Eq a => a -> Bool, witnessed by the function match :: Eq a => Match a -> a -> Bool. This talk looked at the connection between functions and data in a few different ways, focusing more on practical implications than theoretical ones.

Currying

Presented on January 20, 2020 at Brisbane Functional Programming Group
Slides | Handout

This talk digs into the right-associativity of the (->) operator. It is well-known that a -> b -> c is the same as a -> (b -> c). Supplying one argument to a “multi-argument function” will return a function, but newer functional programmers are often less fluent at thinking this way. By explicitly writing the “redundant” parentheses, we can trick our brains into seeing familiar functions in a new light.

Tour of the Typelevel

Presented on November 12, 2019 at Brisbane Functional Programming Group
Slides | Handout

This talk is a whirlwind tour of Haskell’s type-level features. We touch on DataKinds, GADTs, ConstraintKinds, PolyKinds, MultiParamTypeClasses, FunctionalDependencies, TypeFamilies, and ScopedTypeVariables with small motivating examples. A little familiarity with these features makes it much easier to trace how advanced Haskell libraries work their magic. Which is convenient, because Brad Parker will be following up with a demonstration of how Servant’s type-level DSL works.

Reflex Outside the Browser

Presented on September 2, 2019 at Compose Melbourne (invited speaker)
Slides | Handout | Code

Functional Reactive Programming (FRP) is often introduced by discussing events and behaviors, and how to transform and mix them. But once you understand the primitives, what do you do with them? Where do the first events come from, and how do you wire these parts into a larger whole?

FRP promises benefits in more domains than just user interfaces, so let’s take a look at Reflex outside its most common habitat of web frontends. There’s now a fairly up-to-date version of Reflex on Hackage, so we can play with it right away and leave GHCjs, Reflex-DOM, special build tools, and the custom nix frameworks for later.

An FRP network of events and behaviors runs inside a library called a “host”, which interfaces between the FRP network and the outside world. Using an interactive OpenGL program as our example, we’ll explore how a slightly larger reactive program hangs together, and how it uses the host’s features to do what it needs to do.

Copyright © 2024 Jack Kelly
Site generated by Hakyll (source)