Tony Morris


Senior Software Engineer at NICTA, Functional Programming Educator

Tony Morris is a software product developer who has deployed functional programming techniques in industry for over 10 years. Tony teaches at the tertiary level and for professional programmers with a view toward producing a viable commercial result. Tony is currently a Senior Software Engineer at NICTA where he is tasked with promoting and educating on functional programming for the benefit of all Australian software developers.

Tony takes a fastidious, principled approach to functional programming both when deployed in practice and when in a learning environment to ensure maximum yield from the effort. Tony believes that exploring principles and the following consequences provides a rewarding experience for all involved.

YOW! Lambda Jam 2013 Brisbane

Argonaut: Purely-Functional JSON in Scala


Argonaut is a purely-functional library for dealing with JSON in Scala. Argonaut utilises advanced functional programming techniques that emphasise correctness and performance without sacrificing convenience. Argonaut provides zippers and lenses for efficient navigation and modification of immutable data structures; type-class based codecs for robust, composable mappings between Scala data structures and JSON; and data-types for accurately capturing the essence of JSON and the errors that can occur.

In this talk we will take a look at general principles for designing robust, purely functional libraries in Scala. We will then be taking a deeper technical dive into the specifics of Argonaut, examining the abstractions it uses, the specifics of how they are applied and why these techniques are invaluable to quality code.

Zippers, Comonads and Data Structures in Scala


The term zipper is a colloquial used to describe n-hole (most often, 1-hole) contexts. That is, a data structure that has a hole or pointer focused on a specific element with the ability to efficiently traverse to its neighbouring elements, providing an elegant solution for the need to efficiently traverse and modify immutable data structures. Comonads, the categorical dual of Monads, provide an abstraction for dealing with types that allow extraction. That is, the ability to take a value out of a context; for example, the fact that it is a total operation to extract the head of a non-empty list.

In this talk, we will dive into the implementation of purely-functional data structures in Scala. Exploring zippers, Comonads, and their relationship.

Zippers, Comonads and Data Structures in Scala


Whilst conceptually straight forward, implementing and utilising zippers and comonads can be challenging.

In this workshop we will take a deeper dive into the content presented during the correspondingly titled talk. The workshop will step through implementing specific cases of zippers in Scala, as well as investigating general techniques for deriving zippers.

For those who want to follow along, come armed with a laptop including a JVM and a clone of the repository from: