gilmi Profile picture
Nov 12, 2021 17 tweets 7 min read Read on X
I like building stuff with #Haskell.

In this thread I'd like to share with you a few selected side projects I've made over the years 👇🧵

1/N
My first real Haskell program was hablog, a blog/website server, built with scotty, that powers my website (gilmi.me) to this day.

It dynamically converts markdown files to html and serves them.

Github.com/soupi/hablog

2/N
The second interesting project I worked on was Pureli, a project made as part of my CS degree.
Pureli is a purely functional, dynamically typed lisp with parallel evaluation (which isn't actually that important).

Pureli was my first dip into PLT&I.

github.com/soupi/pureli

3/N
Another interesting project was HIP-8, a chip-8 emulator, made with SDL2.

Working on this project helped me a lot in understanding how machines actually work.

(From here on the chronology gets a little blurry, sorry!)

github.com/soupi/chip-8

4/N
msg is a toy chat app.

The server is written in Haskell. It uses STM and message passing to communicate between users (over sockets or websockets).

The client is written in purescript using the purescript-specular library (reflex clone).

github.com/soupi/msg

5/N
I built Gathering to learn more about webdev and to create a place for announcing online purescript gatherings (at the time) after meetup decided we shouldn't use it to announce online events (hello from 2021).

I wrote a blog post about gathering:
gilmi.me/blog/post/2017…

6/N
x86-debug is a (subset of) x86 asm interpreter, prettyprinter and step-debugger. I used it to debug/test a compiler I was building when I was learning about compilers

x86-debug has gdb-like introspection, breakpoints, and can step backwards as well!

github.com/soupi/x86-debug

7/N
One day I woke up and decided I'd like to be able to play music on my computer while in bed. So I wrote sod-cmus: a web interface to cmus.

I used Spock for the web server, lucid for the html generation, and process to invoke the cmus-remote process.

gitlab.com/gilmi/sod-cmus

8/N Image
I built imgs because I wanted to self host a picture album and be able to browse images stored in remote computers.

gitlab.com/gilmi/imgs

9/N Image
Over I've written quite a few small games in several languages including C++, Haxe, Elm and Purescript.
With nyx-game I decided to take the plunge and build a bullet-hell game in Haskell using SDL2. I even commission the art and gave a talk about it

gilmi.me/nyx

10/N
I built sharelinks when I wanted to share links more easily between computers in my home network (can you see a pattern here already)?

Sharelinks is built with scotty.

gitlab.com/gilmi/sharelin…

11/N Image
Logi is yet another programming language interpreter that I've made, this time exploring logic programming!

gitlab.com/gilmi/logi

12/N
Sephibot is a discord bot that originally started as a simple alert bot, but now it can also evaluate Logi expressions.

Sephibot uses the discord-haskell library as its driver.

gitlab.com/gilmi/sephibot

13/N

After writing a tutorial about building a bulletin board with scotty, I created a more featureful bulletin board website to hopefully provide a more complete example for learners.

I wrote a blog post about bullet-in as well:

gilmi.me/blog/post/2021…

14/N
I've been thinking about building Giml, a programming language with emphasis on structural typing, for years.

When I started streaming Haskell work building a compiler, I decided it's time to start working on Giml.

giml-lang.org

15/N
The Giml website is also built with a very simple static website generator I hacked in a weekend. It uses toml, markdown and mustache templates, and is called tapir.

gitlab.com/gilmi/tapir

16/N
Something you might notice about my projects is that I usually work on them to scratch an itch, learn something new, or both. They are usually small and self contained.

You might also notice that I hardly use type-level programming.

Hope this was interesting!

17 / 17

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with gilmi

gilmi Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @_gilmi

Aug 3, 2022
A few things I learned from functional programming and Haskell, a thread. 🧵 1/N
Referential transparency is freeing.
I can trust code and not be surprised by effects, and use substitution to understand what's going on. I feel like I can always understand how something works in the end because I have a simple process to figure things out.

2/N
(First class) functions are really flexible.
This one simple concept can be used to model so many ideas and approaches. From mapping inputs to outputs, to iteration, control flow, composition, state, strategies, dependency injection, abstractions and even data!

3/N
Read 14 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(