FP Complete

Type Safety Doesn’t Matter

I’m a huge believer in using strongly typed languages and leveraging type level protections in my codebases. But I’d like to clarify my new, somewhat modified stance on this: Type safety does not matter. What I mean is that, on its own, type safety is not important. It’s only useful because of what it accomplishes: […]

The Hidden Dangers of Haskell’s Ratio Type

Here’s a new Haskell WAT?! Haskell has a type Rational for working with precisely-valued fractional numbers, and it models the mathematical concept of a rational number. Although it’s relatively slow compared with Double, it doesn’t suffer from the rounding that’s intrinsic to floating-point arithmetic. It’s very useful when writing tests because an exact result can be predicted ahead of time. […]

Hiring Haskell Developers

rust

FP Complete is actively seeking multiple engineers to work with our globally distributed team of software engineers. This blog post is to announce a new job opening for a developer role focused on Haskell development. At all times you can find an up-to-date listing of job openings on our jobs page. Below is the job information […]

Combining Axum, Hyper, Tonic, and Tower for hybrid web/gRPC apps: Part 4

This is the fourth and final post in a series on combining web and gRPC services into a single service using Tower, Hyper, Axum, and Tonic. The full four parts are: Overview of Tower Understanding Hyper, and first experiences with Axum Demonstration of Tonic for a gRPC client/server Today’s post: How to combine Axum and […]

Combining Axum, Hyper, Tonic, and Tower for hybrid web/gRPC apps: Part 3

This is the third of four posts in a series on combining web and gRPC services into a single service using Tower, Hyper, Axum, and Tonic. The full four parts are: Overview of Tower Understanding Hyper, and first experiences with Axum Today’s post: Demonstration of Tonic for a gRPC client/server How to combine Axum and […]

Combining Axum, Hyper, Tonic, and Tower for hybrid web/gRPC apps: Part 2

This is the second of four posts in a series on combining web and gRPC services into a single service using Tower, Hyper, Axum, and Tonic. The full four parts are: Overview of Tower Today’s post: Understanding Hyper, and first experiences with Axum Demonstration of Tonic for a gRPC client/server How to combine Axum and […]

Combining Axum, Hyper, Tonic, and Tower for hybrid web/gRPC apps: Part 1

I’ve played around with various web server libraries and frameworks in Rust, and found various strengths and weaknesses with them. Most recently, I put together an FP Complete solution called Zehut (which I’ll blog about another time) that needed to combine a web frontend and gRPC server. I used Hyper, Tonic, and a minimal library […]

Rust’s as_ref vs as_deref

What’s wrong with this program? fn main() { let option_name: Option<String> = Some(“Alice”.to_owned()); match option_name { Some(name) => println!(“Name is {}”, name), None => println!(“No name provided”), } println!(“{:?}”, option_name); } The compiler gives us a wonderful error message, including a hint on how to fix it: error[E0382]: borrow of partially moved value: `option_name` –> […]

Intermediate Training Courses – Haskell and Rust

I’m happy to announce that over the next few months, FP Complete will be offering intermediate training courses on both Haskell and Rust. This is a follow up to our previous beginner courses on both languages as well. I’m excited to get to teach both of these courses. More details below, but cutting to the […]

Tying the Knot in Haskell

This post has nothing to do with marriage. Tying the knot is, in my opinion at least, a relatively obscure technique you can use in Haskell to address certain corner cases. I’ve used it myself only a handful of times, one of which I’ll reference below. I preface it like this to hopefully make clear: […]