{"id":18694997,"url":"https://github.com/rybla/shape-lang-purs","last_synced_at":"2026-01-26T23:24:48.100Z","repository":{"id":37264362,"uuid":"463665132","full_name":"rybla/shape-lang-purs","owner":"rybla","description":"A well-typed structural editor.","archived":false,"fork":false,"pushed_at":"2022-09-09T01:04:12.000Z","size":3469,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-18T23:34:47.087Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://riib11.github.io/shape-lang-purs/","language":"PureScript","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/rybla.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}},"created_at":"2022-02-25T20:20:43.000Z","updated_at":"2023-06-09T10:33:13.000Z","dependencies_parsed_at":"2022-07-12T05:00:51.661Z","dependency_job_id":null,"html_url":"https://github.com/rybla/shape-lang-purs","commit_stats":null,"previous_names":["rybla/shape-lang-purs"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rybla/shape-lang-purs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rybla%2Fshape-lang-purs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rybla%2Fshape-lang-purs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rybla%2Fshape-lang-purs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rybla%2Fshape-lang-purs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rybla","download_url":"https://codeload.github.com/rybla/shape-lang-purs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rybla%2Fshape-lang-purs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28791168,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T21:49:50.245Z","status":"ssl_error","status_checked_at":"2026-01-26T21:48:29.455Z","response_time":59,"last_error":"SSL_read: 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":[],"created_at":"2024-11-07T11:13:36.578Z","updated_at":"2026-01-26T23:24:48.063Z","avatar_url":"https://github.com/rybla.png","language":"PureScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# README\n\nTODO: description\n\n## Features\n\nTODO\n\n## Syntax\n\nTODO\n\n## Developement\n\n### Prerequisites\n\nNote that these are all installed during setup.\n\n- `purescript`\n- `spago`\n- `parcel`\n\n### Setup\n\nTo get an instance of `shape-lang-purs` built from scratch, do the following:\n\n```\ngit clone https://github.com/Riib11/shape-lang-purs.git\ncd shape-lang-purs\nnpm install\nnpm run build\n```\n\n### The real building instructions:\n\n```\nnpm run build ; npm run bundle ; npm run serve\n```\n\n### Building\n\nBuild the purescript `spago` project via:\n\n```\nnpm run build\n```\n\nTo use sourcemaps, first set the environment variable\n```\nexport NODE_OPTIONS=--enable-source-maps\n```\nor whatever windows uses for environment variable syntax.\n\n### Serving\n\nServe the app via `parcel` using:\n\n```\nnpm run serve\n```\n\n### Testing \n\n(For testing changes)\n\n1. Set `module_` to the correct `test*` in `Language.Shape.Stlc.Initial`. For example, `test1`.\n2. `npm run build`\n3. `npm run serve`\n4. Open the webapp. Perform the changes you want until a bug or whatever else\n5. In the console, copy the log that appears directly after \"===[ changeHistory ]===\" logging header. You now have the  `ChangeHistory`, as a string, that results in the current state.\n6. In `Test.ChangeHistory`, add a new element to the array defining `changeHistories`. The format is `\u003clabel\u003e /\\ \u003cinitial module\u003e /\\ \u003cchange history\u003e`. So, pick a `\u003clabel\u003e`, and use the same `Initial.test*` that you specified in step 1. For the `\u003cchange history\u003e` paste the text you copied in step 5.\n7. In `Test.Main`, change the `main` function has a line `ChangeHistory.runChangeHistory $ Map.lookup' \u003clabel\u003e ChangeHistory.changeHistories`. Change the `\u003clabel\u003e`\u003e to the one you specified in step 6.\n7.5. For stacktraces: On windows, type $Env:NODE_OPTIONS = \"--enable-source-maps\". On unix, type...\n7.6. Also for stacktraces: Run `npm run build`\n8. Run `npm run test` in the terminal. This should output some logging information corresponding to running your change history.\n9. Add loggers to `Test.ChangeHistory.runChangeHistory` if you want to print out special information in your test.\n\n## Deployment\n\nTo deploy the GitHub pages powered web-app, run the following commands:\n```sh\ngit fetch\ngit pull\nnpm install\nnpm run deploy\ngit add ./docs/\ngit commit -m\"deploy\"\ngit push\n```\n\n\n## Similar Projects\n\nThe following are some projects that have some relevant overlaping goals with\nShape:\n- [Hazel](https://hazel.org/)\n  - a type-sensitive structural editor built on gradual typing\n- [Alfa](https://cth.altocumulus.org/~hallgren/Alfa/index.html)\n- [Meta Programming System (MPS)](https://www.jetbrains.com/mps/)\n  - a framework for defining DSLs and automatically generating a UI\n  - user study: https://dl.acm.org/doi/pdf/10.1145/2950290.2950315\n- [Lambdu](http://www.lamdu.org)\n- [Scratch](https://scratch.mit.edu)\n  - UI design for a structural editor\n - aimed at teaching programming\n- [awesome-structure-editors](https://github.com/yairchu/awesome-structure-editors)\n  - collection of structure editors\n- [Tylr](https://tylr.fun)\n  - the first _tile-based_ editor\n- [Holbert](http://liamoc.net/holbert)\n  - mathematical notation\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frybla%2Fshape-lang-purs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frybla%2Fshape-lang-purs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frybla%2Fshape-lang-purs/lists"}