{"id":22930401,"url":"https://github.com/usethesource/typepal","last_synced_at":"2026-01-16T01:00:55.666Z","repository":{"id":50246391,"uuid":"112488737","full_name":"usethesource/typepal","owner":"usethesource","description":"TypePal is a framework for name analysis, type checking and type inference","archived":false,"fork":false,"pushed_at":"2026-01-08T10:22:58.000Z","size":2446,"stargazers_count":5,"open_issues_count":7,"forks_count":4,"subscribers_count":19,"default_branch":"main","last_synced_at":"2026-01-13T03:33:43.923Z","etag":null,"topics":["domain-specific-language","rascal","type-checking","typechecker"],"latest_commit_sha":null,"homepage":"https://www.rascal-mpl.org/docs/Packages/Typepal/TypePal/","language":"Rascal","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/usethesource.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.md","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-11-29T14:56:18.000Z","updated_at":"2025-12-16T14:30:37.000Z","dependencies_parsed_at":"2024-03-04T14:03:54.370Z","dependency_job_id":"921ec3d7-6db6-482a-a891-fb2ef581806b","html_url":"https://github.com/usethesource/typepal","commit_stats":null,"previous_names":[],"tags_count":107,"template":false,"template_full_name":null,"purl":"pkg:github/usethesource/typepal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usethesource%2Ftypepal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usethesource%2Ftypepal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usethesource%2Ftypepal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usethesource%2Ftypepal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/usethesource","download_url":"https://codeload.github.com/usethesource/typepal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usethesource%2Ftypepal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28475119,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T00:15:39.755Z","status":"ssl_error","status_checked_at":"2026-01-16T00:15:32.174Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["domain-specific-language","rascal","type-checking","typechecker"],"created_at":"2024-12-14T10:27:54.093Z","updated_at":"2026-01-16T01:00:55.595Z","avatar_url":"https://github.com/usethesource.png","language":"Rascal","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TypePal\n\nAn experiment in type checker generation. _Warning: work in progress!_\n\nFrom the user perspective the basic idea is as follows:\n\n1. Start with a Rascal grammar of the language of interest, say, MiniML.\n2. Write functions for specific language constructs\n   - `define` captures all defining occurrences of variables and their scopes;\n   - `use` captures all uses of variables;\n   - `require` captures all static requirements on the use of certain constructs, such formal/actual parameter correspondence and the like;\n    - `calculate` to compute a type for a language fragment using earlier calculated types, think of the result type of an operator based on its argument types.\n3. The above functions will populate a fact/requirement model (or `TModel` for short) of a source program to be type checked.\n4. Apply the `collect` function to a parsed program (a parse tree). This will apply `define`/`use`/`require`/`calculate` to all relevant places in the tree, will create scopes and use/def information and will also build a collection of constraints. They are all part of the `TModel`.\n5. Apply `solve` to the `TModel` resulting from the previous step. `solve` is happy if all constraints can be solved and generates error messages otherwise. `solve` also enhances the original `TModel` with derived facts that can be used for use/def analysis, interactive display of type information, and the like.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusethesource%2Ftypepal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fusethesource%2Ftypepal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusethesource%2Ftypepal/lists"}