FP Complete was founded on a simple vision: we can make the world a better place with better software. And better tools, languages, and processes lead to better software. We believe Haskell is one of the best languages available today for writing robust, performant, concurrent, and maintainable software.

New to Haskell? Jump to why Haskell or getting started with Haskell.

Our open source legacy

FP Complete and its engineering team have created, contributed to, and continue to maintain many of the most popular and useful tools and libraries in the Haskell ecosystem. Some of our most prominent contributions include:

What we offer

FP Complete offers a wide range of free and paid services around Haskell. Our goal is to help individuals and companies fully leverage this industrial strength, revolutionary language to make better software. We have helped dozens of companies through our services, including:

  • Training
  • Consulting
  • Staffing
  • Code review
  • Audit

Our experience

While we are domain agnostic, we have spent significant time using Haskell in quality-focused industries, including:

  • Life sciences
  • Medical devices
  • Fintech
  • Blockchain
  • Distributed computation/High Performance Computing

Learn more

Want to learn more? Please contact our sales team to set up a call with one of our engineers. We also offer related services in DevOps, management, and Rust software development.

Interested in our free content offerings? Keep reading for more.

Why Haskell

Watch Michael Snoyman, Vice President of Engineering at FP Complete, talk about What Makes Haskell Unique

We love Haskell

Haskell produces programs which are maintainable, productive, and efficient.

Haskell excels on two fronts, type systems and declarative programs:

  • Strong, static typing lets us impose hard constraints on what code can and cannot do.
  • Declarative programs are high-level, can be reasoned with, and reproduced.

Haskell has significant usage in:

  • Web development
  • Concurrent and parallel programming
  • Cluster computing
  • Financial modeling
  • Scientific and biotech modeling
  • Parsers, compilers, type-checkers
  • Blockchain

Learn more on our promote Haskell page.

Get Started With Haskell

Ready to dive in? We've put together a comprehensive getting started guide to install a complete Haskell toolchain and start writing real world applications.

We also have an extensive collection of Haskell learning materials.

Improve your Haskell

FP Complete offers a comprehensive Haskell curriculum called Applied Haskell. We regularly offer public training sessions, as well as custom-tailored corporate sessions. Please contact us for availability.

We also offer the full course syllabus online free of charge for self-learners.

Keep going!

FP Complete regularly blogs on various Haskell topics. Check out our blog to see the latest.

Stay in touch!

If you're interested in Haskell, please sign up for our Haskell mailing list to hear the latest from FP Complete on Haskell.

Kafka Library

Reliable High Performance Execution, Runtime Safety,
and Easier Concurrency

Pure-Haskell Language Package

This is a pure-Haskell language package for producing to and consuming from Kafka clusters. The wire protocol format is derived directly and automatically from the Kafka protocol specification. It has structured logging and explicit error handling (no surprises). It is exposed to the user via a constant-memory streaming API (similar to Kafka Streams) in Haskell, which also inherently mitigates backpressure. Supports concurrent streaming to different partitions via normal Haskell green threads out of the box. It is well tested at the protocol format level up to the protocol level with its test suite making use of ephemeral Zookeeper clusters.


  • Pure-Haskell: make use of existing powerful concurrency in Haskell, avoid the pitfalls of talking to C library, support the latest and greatest protocol by being more nimble, avoid common exploits and segmentation faults seen in C libraries.
  • Streaming API: connect pieces of your project together via streams, anywhere from HTTP to Websocket to Kafka to the database; you can pipe these together in a uniform way. Allows "fire and forget" style logging/metrics to Kafka.
  • Efficient Kafka streaming is an art (latency vs throughput) and you want a language that is high-level like Haskell to work in that context. You want something that helps you manage backpressure easily (Conduit, upon which our Kafka library is based).
  • Structured logs, not strings. You may want to perform logic (rebalancing or scaling up/down) based on conditions that happen when talking to the cluster, our logging system allows to easily implement "hooks" to pick up on those events.
  • Errors are explicit: things will never go wrong silently; you have to handle error conditions, meaning you have greater confidence that your Kafka stream will not go down mysteriously.