Newsletter
Issue 290 2021-11-18
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
-
2021 State of Haskell Survey Results by Taylor Fausak
The fifth annual State of Haskell Survey closed this week. This post will graph the responses, analyze them, and compare them to previous years.
-
Applying File Changes with
fix
and GADTs by Dan FithianThis post goes into the challenges I encountered implementing incremental file changes, and how I solved them with custom parsers,
fix
, and GADTs. -
Haddock: disambiguating types and values by Fraser Tweedale
When types and data constructors share a name, Haddock, Haskell’s documentation generator, can get confused. In this post I show how to disambiguate types and values in Haddock documentation.
-
Haskell IHP Framework, from a Technical and Business Perspective by Amitai Burstein
With IHP, I know that we’ll be able to build better solutions for our clients. Having a powerful type system and compiler has already proven to be of the utmost value for the frontend, and I’m happy there’s a viable backend option.
-
Safe sparkle: A resource-safe interface with linear types by Noah Goodman
In this post, I will discuss some of the more important design choices I made, both as a way to introduce people to the new safe interface for
sparkle
, and possibly, as a more general guideline for things to consider when designing a library that achieves safe resource management in a linear monad. -
Textual Representation in Haskell with Witch by Thomas Bach
As I introduced
witch
I encountered more cases where I was actually just converting objects from one representation into another one, either by introducing extra functions likepetAsString
or by using type classes likeToField
. -
I struggled to find any instruction about using websockets with Servant. The official docs were fairly comprehensive on many other topics, but a section for websockets is missing.
-
Writing about Haskell is Hard by Anthony Super
If your first thought upon clicking on a blog post entitled “Writing about Haskell is Hard” was “I bet this guy was writing a very different sort of post, got frustrated, and went back to the drawing board,” congradulations, you’re right!
Jobs
- Software Engineer at ACI Learning
We are currently accepting applications for full-stack software professionals to join our small, but talented, multidisciplinary team.
- Channable is looking for a Haskell team lead (ad)
Channable is always hiring talented Haskell engineers and is now looking for someone to lead one of our Haskell teams. We’re a fast-growing international scale-up and while you can still benefit from the start-up vibe, working at Channable also means being part of a professional company with an outstanding development team.
-
Haskell Developer at MLabs (ad)
We are one of the leading Haskell consultancies in the fintech, blockchain and AI space, with a passion for Haskell and open source software. We are looking for a remote Haskeller to join our team. If you are excited about Haskell and are up for a new challenge, please apply here or visit our website! For any questions please email mark@mlabs.city.
Trying to hire a Haskell developer? You should advertise with us!
In brief
-
Competitive programming in Haskell: BFS, part 4 (implementation via STUArray) by Brent Yorgey
In a previous post, we saw one way to implement our BFS API, but I claimed that it is not fast enough to solve Modulo Solitaire. Today, I want to demonstrate a faster implementation.
-
Divisible and the Monoidal Quartet by Daniel Mlot
The gist of it is that “
Divisible
is a contravariantApplicative
, andDecidable
is a contravariantAlternative
” is not a full picture of the relationships between the classes, as there are a few extra connections that aren’t obvious to the naked eye. -
Dragging Haskell Kicking and Screaming into the Century of the Fruitbat by Sandy Maguire
Yesterday, the new Haskell CLC decided to remove
(/=)
from theEq
typeclass. As expected, the community has embraced this change with characteristic grace. -
Episode 5: Chris Smith by The Haskell Interlude
Chris Smith is interviewed by Joachim Breitner and Andres Löh. Chris is the author of the CodeWorld teaching tool and discusses why too much curry in the language can make error messages hard to digest and why a self respecting testing library certainly should be used to test itself.
-
Haskell breaking changes by Fumiaki Kinoshita
This document describes a list of upcoming/proposed changes to Haskell core/de facto libraries.
-
Monad Architecture by Haskell Weekly Podcast
This week Cameron and Taylor answer our first listener question: How should you structure large applications? We compare ReaderT with MTL along with other approaches.
-
PSA: 9.2.1 AArch64 miscompilation by Moritz Angermann
The slew of new changes in GHC 9.2.1, including all the work the lead to the lead to subword type info in Cmm to support the C Calling Convention on aarch64-darwin, and subsequently led to subword primops, sadly also led to a set of low level miscompilations on the aarch64 backend.
-
Reinvention of Programming by Péter Diviánszky
I go back in time when programs were simpler and I reimagine programming from grounds up. Then I come back to the present and work out how to make programming common knowledge like literacy.
Show & tell
-
Dovetail by Phil Freeman
Dovetail is a general-purpose PureScript interpreter written in Haskell. It has excellent support for interop with Haskell code via PureScript’s foreign function interface, along with a high-level Haskell API for integrating such code.
-
Haskell Language Server version 1.5.0 by Javier Neira
Time for another HLS release: Pepe Iborra has done an epic work to improve performance, redefining some of the core pieces of HLS.
-
Prune Juice version 0.7 by Dan Fithian
Since releasing prune-juice, I have received a number of requests asking to apply the unused dependencies directly to the cabal files. It ended up being a lot harder than I expected to implement, and I’m proud to say that it’s finally supported!