{"id":16169096,"url":"https://github.com/omentic/chrysanthemum","last_synced_at":"2025-10-05T14:55:13.627Z","repository":{"id":155917165,"uuid":"623830537","full_name":"omentic/chrysanthemum","owner":"omentic","description":"A blossoming type system.","archived":false,"fork":false,"pushed_at":"2023-07-20T22:47:13.000Z","size":3096,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T06:36:27.212Z","etag":null,"topics":["bidirectional-typechecking","lambda-calculus","rust","type-system","typeclasses"],"latest_commit_sha":null,"homepage":"https://apropos.codes/chrysanthemum/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"0bsd","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/omentic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2023-04-05T07:17:16.000Z","updated_at":"2025-01-05T00:46:52.000Z","dependencies_parsed_at":"2024-11-02T12:41:33.177Z","dependency_job_id":null,"html_url":"https://github.com/omentic/chrysanthemum","commit_stats":null,"previous_names":["omentic/chrysanthemum"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/omentic/chrysanthemum","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omentic%2Fchrysanthemum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omentic%2Fchrysanthemum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omentic%2Fchrysanthemum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omentic%2Fchrysanthemum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/omentic","download_url":"https://codeload.github.com/omentic/chrysanthemum/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omentic%2Fchrysanthemum/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260447686,"owners_count":23010548,"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":["bidirectional-typechecking","lambda-calculus","rust","type-system","typeclasses"],"created_at":"2024-10-10T03:14:05.308Z","updated_at":"2025-10-05T14:55:08.574Z","avatar_url":"https://github.com/omentic.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# chrysanthemum\n\nchrysanthemum is a simple language with a complex type system, initially written as a term project for CPSC 539.\nIt implements a number of features from the excellent *Types and Programming Languages*, including:\n- The simply typed lambda calculus\n- Bidirectional type checking and subtyping support\n- A somewhat complex type system: including support for:\n  - `unit`, `bool`, `int`, `nat`, `float`, `str`,\n  - `struct`, `tuple`, `union`, `list`, `array`, `slice`,\n  - `interface`, `empty`, `error`\n\n## todo\n\n- [x] the simple lambda calculus: implement `execute`\n- [x] to be fancy: implement `parse`\n- [x] to lose my sanity: implement `parse_file`\n- [x] bidirectional typechecking: implement `infer` and `check`\n- [x] extend to additional basic types: refactor `Term`\n- [x] extend to complex types: improve `subtype`\n- [x] meet my original standards: implement `interface`\n- [ ] make complex types useful: implement `access`\n- [ ] type classes: implement `monomorphize`\n- [ ] simple effects: extend `ast`\n- [x] testtesttest\n\n## architecture\n\n```bash\nsrc/\nsrc/main.rs    # the user facing program\nsrc/simple.rs  # the simple lambda calculus: execution\nsrc/ast.rs     # the fundamental representation of types and terms\nsrc/bidirectional.rs # the core of the language: checking, inference\nsrc/unification.rs   # an alternate core: checking and inference by unification\nsrc/parser.rs        # parses user programs into proper data structures\nsrc/monomorphize.rs  # a monomorphization pass for type classes\nsrc/effects.rs       # code for effects idk\ntest/ # various tests\n```\n\n## bibliography\n\n- [Types and Programming Languages](https://www.cis.upenn.edu/~bcpierce/tapl/)\n- [Advanced Topics in Types and Programming Languages](https://www.cis.upenn.edu/~bcpierce/attapl/)\n- [Bidirectional Typing Rules: A Tutorial](https://www.davidchristiansen.dk/tutorials/bidirectional.pdf)\n- [Bidirectional Typechecking](https://research.cs.queensu.ca/home/jana/bitype.pdf)\n- [Bidirectional Type Class Instances](https://arxiv.org/pdf/1906.12242.pdf)\n- [Typechecking for Higher-Rank Polymorphism](https://arxiv.org/pdf/1306.6032.pdf)\n- [How to make ad-hoc polymorphism less ad-hoc](https://dl.acm.org/doi/pdf/10.1145/75277.75283)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomentic%2Fchrysanthemum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fomentic%2Fchrysanthemum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomentic%2Fchrysanthemum/lists"}