{"id":13394863,"url":"https://github.com/lexi-lambda/hackett","last_synced_at":"2025-05-16T05:08:03.901Z","repository":{"id":41377409,"uuid":"70437071","full_name":"lexi-lambda/hackett","owner":"lexi-lambda","description":"WIP implementation of a Haskell-like Lisp in Racket","archived":false,"fork":false,"pushed_at":"2024-04-14T16:40:55.000Z","size":996,"stargazers_count":1170,"open_issues_count":35,"forks_count":50,"subscribers_count":68,"default_branch":"master","last_synced_at":"2025-04-07T23:13:34.113Z","etag":null,"topics":["racket"],"latest_commit_sha":null,"homepage":"https://lexi-lambda.github.io/hackett/","language":"Racket","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lexi-lambda.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-10-09T23:44:54.000Z","updated_at":"2025-04-06T06:11:01.000Z","dependencies_parsed_at":"2024-06-18T10:41:10.148Z","dependency_job_id":"e76967e7-e0d4-4389-90be-b93907492ffc","html_url":"https://github.com/lexi-lambda/hackett","commit_stats":{"total_commits":211,"total_committers":9,"mean_commits":"23.444444444444443","dds":0.09952606635071093,"last_synced_commit":"e90ace9e4a056ec0a2a267f220cb29b756cbefce"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexi-lambda%2Fhackett","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexi-lambda%2Fhackett/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexi-lambda%2Fhackett/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexi-lambda%2Fhackett/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lexi-lambda","download_url":"https://codeload.github.com/lexi-lambda/hackett/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254471059,"owners_count":22076585,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["racket"],"created_at":"2024-07-30T17:01:34.353Z","updated_at":"2025-05-16T05:07:58.893Z","avatar_url":"https://github.com/lexi-lambda.png","language":"Racket","readme":"# Hackett [![Build Status](https://travis-ci.org/lexi-lambda/hackett.svg?branch=master)](https://travis-ci.org/lexi-lambda/hackett)\n\nHackett is an attempt to implement a Haskell-like language with support for Racket’s macro system, built using the techniques described in the paper [*Type Systems as Macros*][types-as-macros]. It is currently *extremely* work-in-progress.\n\nHere are some of the features that Hackett supports **right now**:\n\n  - Bidirectional type inference\n  - Algebraic datatypes (ADTs)\n  - Pattern matching\n  - Exhaustiveness checking\n  - Typeclasses (including multi-parameter typeclasses)\n  - Higher-kinded types\n  - Higher-rank polymorphism\n  - Type-aware/type-directed macros\n  - Laziness\n  - Syntax for infix operators\n  - Scoped type variables\n\nHere are some of the features that still need to be implemented for a minimal release:\n\n  - Orphan/overlapping instance detection/prevention\n  - Strictness analysis\n  - Kindchecking\n\nAnd finally, here is a (non-exhaustive) collection of features I would like to eventually support:\n\n  - Functional dependencies\n  - Row types\n  - GADTs\n  - Type families\n\nDue to the way Hackett is implemented, many things that are language features in Haskell can be derived concepts in Hackett. In fact, Hackett’s ADTs are not primitives, they are actually implemented as a library via the `data` and `case` macros in `hackett/private/adt`. Other things, like newtype deriving and generics, should be possible to implement as derived concepts as well.\n\nHere’s some sample Hackett code that demonstrates some of Hackett’s features:\n\n```racket\n#lang hackett\n\n(data (Maybe a)\n  Nothing\n  (Just a))\n\n(def x : Integer\n  (let ([y 3]\n        [z 7])\n    {y + z}))\n\n(class (Show a)\n  [show : {a -\u003e String}])\n\n(instance (forall [a] (Show a) =\u003e (Show (Maybe a)))\n  [show (λ* [[(Just x)] {\"(Just \" ++ (show x) ++ \")\"}]\n            [[Nothing ] \"Nothing\"])])\n```\n\n[**For a much more in-depth look at Hackett, see the documentation.**][hackett-docs]\n\n## Trying Hackett\n\nTo reiterate: **Hackett is extremely experimental right now.** Things are not guaranteed to work correctly (or work at all), and things are likely to change dramatically. If you really want to install Hackett to play around with it, though, you can.\n\nYou will need to have Racket installed to use Hackett. Using `raco`, you can install Hackett as a package:\n\n```\n$ raco pkg install hackett\n```\n\nNow you can use Hackett by writing `#lang hackett` at the top of a file.\n\n[hackett-docs]: https://lexi-lambda.github.io/hackett/\n[types-as-macros]: http://www.ccs.neu.edu/home/stchang/pubs/ckg-popl2017.pdf\n","funding_links":[],"categories":["Racket","Libraries"],"sub_categories":["[Racket](https://racket-lang.org/)"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flexi-lambda%2Fhackett","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flexi-lambda%2Fhackett","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flexi-lambda%2Fhackett/lists"}