Title: Monads, Arrows, Traces and other Categorical Amusements (title with apologies to Martin Gardner) Dominic R. Verity Department of Computing Macquarie University Abstract: As functional programmers most of us will, at some point, have heard about a bag of mathematical tools which rejoice under the collective term "category theory". Maybe we caught the whisper that our favourite functional "design pattern", the monad, had originally been inherited from category theory. Possibly we were taught that category theory has been shown to be a convenient tool for organising the formal semantics of programming languages. If our supervisors were particularly inclined to such things, they may even have tried to claim that functional programming was, in some sense, the "internal language" of category theory. In this tutorial, I hope to convince you that all of these claims are indeed founded in some truth. To do that my intention is to introduce you to just enough category theory to show that monads and arrows do arise naturally from purely categorical considerations. Along the way we will find that functional programming really can be regarded as the language in which (some parts of) category theory can be written. Of course, were this tutorial simply an attempt to illustrate how pragmatic functional programming practice can be encoded as an exercise in abstract mathematics, then I suspect that I will win few friends by delivering it. Instead, its purpose is to illustrate how we may plunder new functional programming principles from our categorical colleagues.