Tomas Petricek's homepage

Functional programming & Trainings

I’m a frequent speaker at F# and .NET events, author of numerous C# and F# articles and a StackOverflow addict. I have been Microsoft C# MVP since 2004 and I used F# since early Microsoft Research versions.

I’m convinced that F# and functional prog­ram­ming work well in practice and I do my best to help them:

I'm also partly involved in Phalanger, which is a PHP compiler for .NET. If you're interested in integrating PHP and ASP.NET contact DEVSENSE.

Academia & research

I'm a PhD student at the University of Cambridge, under the supervision of Alan Mycroft and Don Syme. I did a Master's degree at Charles University and visited Microsoft Research as an intern.

I'm interested in programming models and questions like: What is the best "language" for solving a given problem? How to encode these models in existing lang­uages? How to help programmers avoids certain types of errors when using the model?

  • Reactive Programming. I designed a language extension for F# and Haskell that allows easy encoding of various programming models for reactive, parallel and concurrent programming.
  • Distributed Web. I designed the first web framework for F# that integrates client-side and server-side development, which also inspired commercial WebSharper.

You can find my publications and other information about my research projects on my academic page.

Latest writings from my blog

F# in Academia: Present at upcoming events!

The F# language was born as a combination of the pragmatic and real-world .NET platform and functional programming, which had a long tradition in academia. Many useful ideas or libraries in F# (like asynchronous workflows and first-class events) are inspored by research in functional programming (namely, the work on monads, continuations and functional reactive programming).

Exchanging the ideas between the research community and the real-world is one of the areas where F# excels. Indeed, the first applicatiosn of F# inside Microsoft (in the Machine Learning group at Cambridge) were all about this - combining research in machine learning with a language that can be easily used in practice.

However, F# and the F# users also made numerous contributions to the programming langauge research community. Influential ideas that come from F# include active patterns and the F# style of meta-programming for translating F# to JavaScript). I think there is a lot more that the academic community can learn from the F# community, so I'd like to invite you to talk about your ideas at two upcoming academic events!

What, why, when, where and how? Continue reading!

Read the complete article
Monday, April 16, 2012

More Recent Articles

  • TryJoinads (VII.) - Implementing joinads for async workflows (3/23/2012)

    In the final article of the TryJoinads series, I discuss how to implement the joinad structure for F# asynchronous workflows. The article also demonstrates the importance of aliasing for match! notation.

  • TryJoinads (VI.) - Parsing with joinads (3/21/2012)

    This article shows how to use joinads (and the match! extension) for writing parsers. Using joinads one can easily express choice and write a parser that recognizes an intersection of languages.

  • Asynchronous client/server in F# (QCon 2012) (3/12/2012)

    Last week, I gave a talk on asynchronous programming in F# at QCon London. I used the one hour slot to implement a Social Rectangle Drawing App - an application that showed the importance of asynchronous workflows on both client-side and server-side.

  • TryJoinads (V.) - Implementing the option joinad (3/2/2012)

    The match! research extension for F# can be used to program with a number of monadic computations. In this article, we look how to support it in one of the simplest monads - the maybe monad.

  • TryJoinads (IV.) - Concurrency using join calculus (2/22/2012)

    This article shows another application of the match! language extension for F#. This time, we look how to encode join calculus, which is an elegant abstraction for declarative concurrent programming.

  • TryJoinads (III.): Agent-based programming (2/20/2012)

    Agent-based programming is a great way to write concurrent applications without the usual threading issues. In this article, we look how the "match!" research extension for F# simplifies writing agents. In particular, we can easily implement states that do not handle all incoming messages.