Newsletter
Issue 260 2021-04-22
Subscribe now! We'll never send you spam. You can also follow our feed. Read more issues in the archives.
Welcome to another issue of Haskell Weekly! Haskell is a safe, purely functional programming language with a fast, concurrent runtime. This is a weekly summary of what’s going on in its community.
Featured
-
Of function instances and abstract syntax by Daniel Brice
Some Haskell classes
class Myclass a
admit an instance for functionsinstance Myclass a => Myclass (x -> a)
based on the instance fora
. All of these instances have a few things in common: (1) they implement the class methods in a straightforward way asmymethod f = \x -> mymethod (f x)
, and (2) they are polarizing among Haskell practitioners. The linked blog post is a case study of why one might find such instances compelling and useful. -
Arrows, through a different lens by Juan Raphael Diaz Simões
My goal in this post is to show how lenses and other optics can be used in Arrow-based workflows. Doing so is greatly simplified thanks to Profunctor optics and some utilities that I helped add to the latest version of the lens library.
-
Checking for uncheckable: optional constraints
Can we check if an instance exists and acquire its dictionary without defining boilerplate instances by hand, or using template haskell to generate them?
-
Continued Fractions: Haskell, Equational Reasoning, Property Testing, and Rewrite Rules in Action by Chris Smith
In this article, we’ll develop a Haskell library for continued fractions. Continued fractions are a different representation for real numbers, besides the fractions and decimals we all learned about in grade school.
-
Functional Flocks by Eddie Jones
Monads have been widely adopted in the functional programming community, but their dual, co-monads, are sadly not so popular.
-
Hacking on GHC - First Steps by Benjamin Maurer
That’s why I’ve decided to write about my experience - maybe someone will find the solution to a problem here or get motivated to start hacking on GHC!
-
Poltergeist Types by Guillaume Allais
Phantom types are a well-known compile-time tool to ensure that illegal actions (such as attempting to write in a read-only file) are unrepresentable. In this blog post we introduce poltergeist types: phantom types whose parameters may still knock around at runtime.
-
A Random Tour of Typeclass in Haskell by Ong Yi Ren
This article is inspired by Vitaly Bragilevsky’s talk on The clear path to Haskell complexities. This is not a Monad tutorial.
-
Type Families in Haskell: The Definitive Guide by Vladislav Zavialov
Type families are one of the most powerful type-level programming features in Haskell. You can think of them as type-level functions, but that doesn’t really cover the whole picture. By the end of this article, you will know what they are exactly and how to use them.
-
What I wish somebody told me when I was learning Haskell by Evgeny Poberezkin
I tried to convert this rant into the collection of ideas that I hope could help both the people who are just starting to learn Haskell and, maybe, some of those who are getting through the advanced levels.
Jobs
-
Mercury is building a bank for startups. We’re hiring Haskell engineers (generalist and backend). Apply if you want to work with Haskell/Yesod/Persistent and React/Redux/Typescript. You can check out <www.lifeatmercury.com> (pw:
charlietuna
). Reach out to veronica@mercury.com with questions.
Trying to hire a Haskell developer? You should advertise with us!
In brief
-
Default Exception Handlers by Haskell Weekly Podcast
What happens to exceptions when you don’t explicitly handle them? This week we review Taylor’s blog post about default exception handlers.
-
Deploying a Nixified Haskell binary on AWS Lambda by Jente Hidskes
For a current project (which I will be writing about soon!), I need to deploy a Haskell binary to AWS Lambda.
-
The end of history for programming by Gabriella Gonzalez
I spend quite a bit of time thinking about what the end of history for programming might look like. By the “end of history” I mean the point beyond which programming paradigms would not evolve significantly.
-
Global IORef in Template Haskell by Matt Parsons
One of the potential solutions involves persisting some global state across module boundaries. I decided to investigate whether the “Global IORef Trick” would work for this.
-
Implementing Laziness in C by Siddharth Bhat
The aim of this blog post is to explain haskell’s (specifically, GHC) evaluation model without having to jump through too many hoops.
-
Nix in Production with Domen Kožar by Compositional
Domen Kožar is the founder of Cachix, a popular caching service and one of the first products exclusively targeting the Nix ecosystem.
-
Nonempty strings by Type Classes
Thanks for sticking with us, and congratulations on having your first working Haskell program! From here, we’ll be working on improvements to our palindrome program.
-
PureScript v0.14.1 released by Harry Garrood
PureScript v0.14.1 has been released! Most of the changes in this release are bug fixes, but we do also have a couple of new features.
-
Text Maintainers: Meeting Minutes by Emily Pillmore
This meeting is for the text package maintainers as we begin project planning for the
text-utf8
conversion work. -
Why we chose Elm for Humio’s web UI by Humio
Humio software engineers Thomas Anagrius and Jeroen Engels sat down to talk about why they got involved with Elm for web-based front-end programming.
Show & tell
-
indexed-paths by Isaac Elliott
I’ve written a library based around some practical applications of free categories.
-
unicode-collation by John MacFarlane
Until now, the only way to do proper Unicode sorting in Haskell was to depend on text-icu, which wraps the C library icu4c.
-
unlift by Kowainik
Typeclass for monads that can be unlifted to arbitrary base monads.
-
wai-handler-hal by Jack Kelly
This library lets you run
wai
Application
s on AWS Lambda, using the proxy integration features of an API Gateway REST API. This allows you to write your APIs using tools likeservant
, test them locally usingwarp
, and then build deployment binaries usinghal
.