Skip to content

Instantly share code, notes, and snippets.

@fendor
fendor / blog.md
Created June 17, 2026 06:57
GSoC 2020: Multiple Home Units for GHC - GSoC Aftermath

GSoC 2020: Multiple Home Units for GHC - GSoC Aftermath

It has been a great summer for Haskell IDEs. Multiple successful Google Summer of Code projects and lots of contributions to Haskell Language Server. Additionally, Haskell IDE Engine has finally been put to rest! Lots of news, lots to talk about.

In this blogpost, I will tell you a bit about my own Google Summer of Code project, in the scope of which I tackled bringing multiple home units to GHC. We start by talking about why we chose this project in the first place. This is potentially nothing new for people that read the initial proposal, so you might want to skip over the first part. Then we are going to talk about how far we got in the project itself, what works, what doesn’t, how does it work, and what is left to do. Finally, a word or two about my experience in this Google Summer of Code, what I liked, and whether I would recommend it.

Motivation

As explained in on of my previous [blog posts](https://mpickering.github.io/ide/posts/2020-0

@fendor
fendor / GPG email
Created June 15, 2026 15:44
GPG email
https://keys.openpgp.org/search?q=9849506453CA97E75F505D054EF829564CA34FC8
@fendor
fendor / Main.hs
Created June 7, 2026 13:08
MicroBenchmark for HLS
#!/usr/bin/env cabal
{- cabal:
build-depends:
base >= 4.7 && < 5,
criterion >= 1.6 && < 2,
containers >= 0.6 && < 1,
vector >= 0.12 && < 1
-}
-- Run with: cabal run bench.hs
-- (no project setup needed — cabal script handles everything)
@fendor
fendor / Info.md
Last active February 20, 2022 16:04

Cabal Status Command Specification

Describes how we expect the command cabal status to behave from a high-level perspective.

CompilerInfo

> cabal status --output-format=json --compiler | jq
{
  "cabal-version": "3.7.0.0",
@fendor
fendor / A.hs
Created September 5, 2020 19:09
{-# LANGUAGE TemplateHaskell #-}
module A (template) where
import Language.Haskell.TH
template :: DecsQ
template = do
consA <- newName "A"
consA' <- newName "A"
@fendor
fendor / README.md
Created August 31, 2020 10:31
Final submission for Fendor's Google Summer of Code Project "Multiple Home Units For GHC"

GSoC Submission

The goal of my Google Summer of Code project was to introduce support of multiple home units for GHC. The main motivation for this proposal is to help IDEs provide a seamless developer experience. Currently, two of the bigger IDE projects in Haskell are ghcide and Haskell IDE Engine. Both of these projects aim to support a workflow where developers can work on multiple packages, such as a package's library and executable at the same time. The work-force behind it is GHC itself, which is responsible for actually compiling a user's source files. While we succeeded to create a fork that implements the proposal, nothing has been merged into upstream yet. This is to be expected, since it is a huge change that will impact a considerable number of the GHC API's consumers. Therefore this feature needs to be designed with care and code changes verified to have no unintended sid

GHC/Foo.hs:6:12: error:
• Overlapping instances for MyEq Bool arising from a use of ‘==’
Matching instances:
instance MyEq Bool -- Defined in ‘GHC.Base’
instance MyEq Bool -- Defined in ‘GHC.Base’
• In the expression: True == True
In an equation for ‘foo’: foo = True == True
app/Main.hs:3:1: error:
Bad interface file: /home/baldr/Documents/haskell/fprog/dist-newstyle/build/x86_64-linux/ghc-8.11.0.20200817/fprog-0.1.0.0/build/Paths_fprog.hi
/home/baldr/Documents/haskell/fprog/dist-newstyle/build/x86_64-linux/ghc-8.11.0.20200817/fprog-0.1.0.0/build/Paths_fprog.hi: openBinaryFile: does not exist (No such file or directory)
|
3 | import Paths_fprog
| ^^^^^^^^^^^^^^^^^^
Failed,
simple-bios-shell: OK (0.55s)
Finding Cradle for: C:\Users\runneradmin\AppData\Local\Temp\hie-bios-test-bd77a1b14cf6e038\B.hs
Loading Cradle: Just "C:\\Users\\runneradmin\\AppData\\Local\\Temp\\hie-bios-test-bd77a1b14cf6e038\\hie.yaml"
Get runtime GHC library directory (0.06s)
Get runtime GHC version (0.03s)
Initialise Flags (0.16s)
Initial module load
comp opts: ComponentOptions {componentOptions = [], componentRoot = "C:\\Users\\runneradmin\\AppData\\Local\\Temp\\hie-bios-test-bd77a1b14cf6e038", componentDependencies = []} (0.24s)
(1,2) (0.05s)
ghcide: Couldn't find a target code interpreter. Try with -fexternal-interpreter