{"id":19254623,"url":"https://github.com/kevinwilde/type-system-workshop","last_synced_at":"2025-04-11T12:23:57.075Z","repository":{"id":93318062,"uuid":"311455561","full_name":"kevinwilde/type-system-workshop","owner":"kevinwilde","description":"Type system workshop for reactathon","archived":false,"fork":false,"pushed_at":"2021-10-05T04:20:28.000Z","size":59,"stargazers_count":6,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-25T08:42:43.064Z","etag":null,"topics":["static-types","type-inference","type-systems"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kevinwilde.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"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":"2020-11-09T20:22:34.000Z","updated_at":"2024-03-11T10:54:00.000Z","dependencies_parsed_at":"2023-05-09T19:47:15.459Z","dependency_job_id":null,"html_url":"https://github.com/kevinwilde/type-system-workshop","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevinwilde%2Ftype-system-workshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevinwilde%2Ftype-system-workshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevinwilde%2Ftype-system-workshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevinwilde%2Ftype-system-workshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kevinwilde","download_url":"https://codeload.github.com/kevinwilde/type-system-workshop/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248401415,"owners_count":21097328,"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":["static-types","type-inference","type-systems"],"created_at":"2024-11-09T18:36:13.626Z","updated_at":"2025-04-11T12:23:57.054Z","avatar_url":"https://github.com/kevinwilde.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# type-system-workshop\n\n## Set up\n\n1. [Install deno](https://deno.land/manual/getting_started/installation)\n\n2. If you are using VS Code, add [this extension](https://marketplace.visualstudio.com/items?itemName=denoland.vscode-deno). If you use some other editor, there are more instructions [here](https://deno.land/manual/getting_started/setup_your_environment) about setting up your environment.\n\n3. Clone this repo\n\n```\ngit clone https://github.com/kevinwilde/type-system-workshop.git\n```\n\n## Commands\n\nRun tests:\n\n```\ndeno test test/tests.ts\n```\n\nRun a source file:\n\n```\ndeno run  --allow-read index.ts \u003cpath/to/file\u003e\n```\n\n## Workshop format\n\n- ~25 mins: overview of the programming language we are building\n- ~25 mins: implementing a typechecker that relies on type annotations\n- ~20 mins: discussing type inference and how the algorithm will work\n- ~50 mins: implementing the typechecker with inference\n\n## Checkpoints\n\nEverything we're going to be implementing is already available in different branches on this repo. This is here in case you need it or miss something at any point, but don't look now since these are the \"answer key.\"\n\n[Spoilers]\n\n- [Type checker relying on type annotations](https://github.com/kevinwilde/type-system-workshop/compare/01-no-inference-start-point...02-no-inference-stop-point)\n- [Changes for type inference](https://github.com/kevinwilde/type-system-workshop/compare/02-no-inference-stop-point...03-inference-start-point), i.e. new test cases, changes in lexer/parser to make type annotations optional\n- [Type checker with inference](https://github.com/kevinwilde/type-system-workshop/compare/03-inference-start-point...04-inference-completed?diff=split)\n\n## References\n\nThe syntax of our language is mostly based on racket.\n\nThe implementation of the type checker is heavily aided by [_Types and Programming Languages_](https://books.google.com/books/about/Types_and_Programming_Languages.html?id=ti6zoAC9Ph8C) by Benjamin C. Pierce.\n\nThe implementations of the parser and interpreter include ideas from [Northwestern's Programming Languages course](https://users.cs.northwestern.edu/~robby/courses/321-2015-fall/) by Robby Findler and [University of Washington's Programming Languages course](https://www.coursera.org/learn/programming-languages-part-b) by Dan Grossman available on Coursera.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkevinwilde%2Ftype-system-workshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkevinwilde%2Ftype-system-workshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkevinwilde%2Ftype-system-workshop/lists"}