Skip to content

Instantly share code, notes, and snippets.

@MnO2
Last active November 22, 2015 12:53
Show Gist options
  • Save MnO2/7e4a12d1c665d616d6f1 to your computer and use it in GitHub Desktop.
Save MnO2/7e4a12d1c665d616d6f1 to your computer and use it in GitHub Desktop.
Haskell.SG Community Projects

Building Atom Plugin with GHCJS

Motivation

  • Atom community has already have a lot of haskell extension, but they are implemented in coffeescript
  • Rewrite a part fo them in GHCJS
  • A good chance to experiment if GHCJS is feasible to use in real world.
  • Already have a reference implementation, your task is just to copy them and test them.

Goal

  • Functional existing Atom plugins rewrote in GHCJS
  • Newly supported features could also be discussed, we would work on that later.

Skills learned

  • GHCJS
  • Foreign Function Binding with Atom API

Building Your Own Haskell Compiler (SHC: Singapore Haskell Compiler)

Goal

  • Learning by implementing it.
  • You have your own compiler to hack on.
  • Don't overly focus on performance and optimization, as long as it is correct.
  • Know Haskell compiler better.
  • Having a Haskell compiler grows from local.

Requirement

  • Knowing Haskell is not a requirement, it's a community effort and we would help you pick up the language.
  • Know how to program, passionate to hack.

How does it work

  • We would decide the expectation of the progress before next meetup. It could be paper reading or implementation.
  • The speed could be coordinated, ideally it should be at the tempo where everybody doesn't feel stressful.
  • The roadmap is not fixed, since it is a task that even organizers need to learn along the way.

Roadmap

  • Untyped Lambda Calculus Interpreter

    • Implement an untyped lamda calculus interpreter

      • Understand the glossary (what is untyped lambda calculus, normal form)
      • Implement a UCLi
      • Normal order evaluation strategy
      • The target could be decided later.
    • Adding build-in types and annotations to UCLi

      • No typechecking, assuming the inputs are correct
      • Build-in type are not in the form of lambda calculus
      • Understand what is head normal form
    • Foreign Function Interface

      • Bring in the side effect
      • It would become Turing Complete, you would be able to program anything you want
  • Frontend of Haskell Compiler

    • Parsing Haskell (Using haskell-src-ext)

      • Making sure the following Hello World could be parsed

        main = putStrLn "Hello World"
        
    • Support Different Phases of Compilation (desugar, type inference)

      • We would start to collect sample programs as the test cases.
      • Annotate each expr and binding with type signature
      • Implement type inference, type check
      • Implement type class, type instance
      • Implement import, export
  • Code Gen to ULC

    • With this step so that we have a full-functional compiler.
  • Runtime System

    • STG (Spineless Tagless G-Machine)
    • Garbage Collection
  • Standard Library

Collaboration

  • This community project is different from others, since this project is actually launched by CindyLinz in the Taiwan Haskell community. I thought it is a good chance to make two small communities to have contact with each other.
  • For Taiwanese community, gitter has already been chosen.
  • We would start by gitter collaboration for now, since the English speaking for Taiwanese community might be a concern, but chatting by text should be no problem. If it goes well, then we could consider video collaboration.
  • The Singapore community's progress would be independent on Taiwan's community's progress.
  • For offline meetup, we would stick to Singapore community alone at Hackerspace.

Haskell Community Project

Motivation

In the past two years we have been sticking to the form of inviting speakers to talk. However, we feel that this form exhausted organizers and active participants, since it is mostly giving and most of time it is just to fulfill the responsibilities. It's time to try out new way of community development. We would list a few of projects from top of our heads, it might be the projects that have been our wish list for a long time, or it is just a grandiose project that we would want to conquer and learn something along the way. We want it to be a journey to the epiphany where everybody would learn something along the way. Even you are a completely new comers, we welcome you and would manage to find tasks matching your proficiency.

Participate

  • Everyone willing to learn Haskell, we would give proper guidance if you have no previous experience on Haskell.
  • The only condition is that we might invite you to give a talk on your finding.

Code Review

  • For most of the tasks the active participants could help review them. For advanced task we would invite the domain expert to see if they are willing to help and give us guidancce.

Time

  • Weekend biweekly

Collaboration

  • Group Channle Software: It could be decided later, we could decide among irc, gitter, slack or any other suggestions.
  • Github Wiki
  • Google Doc

Projects

At this moment, we drafted out three candidates projects, you are welcomed to propose your own

  • Building Your Own Haskell Compiler
  • Building Atom Plugin with GHCJS
  • Periscope clone

Location

  • Hackerspace.SG

Periscope Clone

Motivation

  • It would be quite handy if we have a SQL to Visulization tool.
  • Haskell to Visualization might also work, since Gabriel Gonzalez mentioned about Haskell and Spreadsheet
  • There are already Periscope or Tableau in the market.
  • Support cross datastore join.
  • Once we have this tool, it could be a no brainer to set it up as long as you have BI need.

Goal

  • A (Haskell or SQL) to Visualization tool.
  • Single data store operation.
  • It supports DSL to do cross data store join, like Haxl.

Skills learned

  • GHCJS
  • Building Website with haskell web framework.
  • Parsing with Haskell
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment