{"id":20082068,"url":"https://github.com/exercism/reasonml","last_synced_at":"2025-06-30T21:34:41.965Z","repository":{"id":34403628,"uuid":"136343260","full_name":"exercism/reasonml","owner":"exercism","description":"Exercism exercises in ReasonML.","archived":false,"fork":false,"pushed_at":"2025-06-30T06:09:05.000Z","size":1215,"stargazers_count":18,"open_issues_count":17,"forks_count":25,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-06-30T06:33:37.481Z","etag":null,"topics":["community-contributions-paused","exercism-track","unmaintained"],"latest_commit_sha":null,"homepage":"https://exercism.org/tracks/reasonml","language":"Reason","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/exercism.png","metadata":{"funding":{"github":["exercism"],"custom":["https://exercism.org/donate"]},"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":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-06-06T14:47:42.000Z","updated_at":"2025-06-30T06:09:08.000Z","dependencies_parsed_at":"2024-01-24T16:28:01.872Z","dependency_job_id":"f53d9866-3469-4155-97fd-c9951b06d5bb","html_url":"https://github.com/exercism/reasonml","commit_stats":{"total_commits":227,"total_committers":24,"mean_commits":9.458333333333334,"dds":0.748898678414097,"last_synced_commit":"23c392ef827666339e961ffe80a560b3d58d35fb"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/exercism/reasonml","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Freasonml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Freasonml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Freasonml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Freasonml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/exercism","download_url":"https://codeload.github.com/exercism/reasonml/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Freasonml/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262854344,"owners_count":23375108,"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":["community-contributions-paused","exercism-track","unmaintained"],"created_at":"2024-11-13T15:41:42.667Z","updated_at":"2025-06-30T21:34:41.932Z","avatar_url":"https://github.com/exercism.png","language":"Reason","funding_links":["https://github.com/sponsors/exercism","https://exercism.org/donate"],"categories":[],"sub_categories":[],"readme":"# Exercism ReasonML Track\n\n[![Configlet](https://github.com/exercism/reasonml/actions/workflows/configlet.yml/badge.svg)](https://github.com/exercism/reasonml/actions/workflows/configlet.yml) [![CI](https://github.com/exercism/reasonml/actions/workflows/main.yml/badge.svg)](https://github.com/exercism/reasonml/actions/workflows/main.yml)\n\n## Setup\n\nFirst install npm (Node Package Manager) - you can do that from this site: https://www.npmjs.com/get-npm\nFollow the instructions under https://reasonml.github.io/docs/en/installation to install ReasonML.\n\n## Contributing\n\nWe welcome all contributions, both large and small.\n\nPlease read about how to [get involved in a track](https://github.com/exercism/docs/tree/master/contributing-to-language-tracks). Be sure to read the Exercism [Code of Conduct](https://exercism.io/code-of-conduct).\n\nFixes and improvements to existing exercises are welcome. Please note that this track's exercises must conform to the Exercism-wide standards described in the [documentation](https://github.com/exercism/docs/tree/master/language-tracks/exercises). If you're unsure about how to make a change, then go ahead and open a GitHub issue, and we'll discuss it.\n\n## Exercise Tests\n\nAll Exercism exercises contain a test suite, which help to guide the user's implementation. You can read more about how we think about test suites in [the Exercism documentation](https://github.com/exercism/docs/blob/master/language-tracks/exercises/anatomy/test-suites.md).\n\nTests should be written using [bs-jest](https://github.com/glennsl/bs-jest).\n\n```re\nopen Jest;\nopen Expect;\n\ndescribe(\"Leap\", () =\u003e {\n  test(\"year not divisible by 4: common year\", () =\u003e\n    expect(Leap.is_leap_year(2015)) |\u003e toBe(false)\n  );\n  test(\"year divisible by 4, not divisible by 100: leap year\", () =\u003e\n    expect(Leap.is_leap_year(1996)) |\u003e toBe(true)\n  );\n})\n```\n\n## Coding Style\n\nUse `PascalCase.re` for Reason implementation file names.\nA Reason interface file (`.rei`) should be included with every exercise to help the user get started.\nUse [refmt](https://github.com/reasonml/reason-cli) on your code before pushing.\n\n## Opening an Issue\n\nIf you plan to make significant or breaking changes, please open an issue so we can discuss it first. If this is a discussion that is relevant to more than just the ReasonML track, please open an issue in [exercism/discussions](https://github.com/exercism/discussions/issues).\n\n## Submitting a Pull Request\n\nPull requests should be focused on a single exercise, issue, or conceptually cohesive change. Please refer to Exercism's [pull request guidelines](https://github.com/exercism/docs/blob/master/contributing/pull-request-guidelines.md).\n\nPlease use [refmt](https://reasonml.github.io/docs/en/extra-goodies.html) to ensure a consistent coding style.\n\n```sh\nrefmt --in-place Example.re\n```\n\n### Verifying Your Change\n\nBefore submitting your pull request, you'll want to verify the changes in two ways:\n\n* Run all the tests for the ReasonML exercises. There is a top level Makefile, run: `make`.\n* Run checks on the repo using [configlet](https://github.com/exercism/docs/blob/master/language-tracks/configuration/configlet.md). From the top level, run:\n\n```sh\n./bin/configlet lint --track-id reasonml .\n```\n\n## Contributing a New Exercise\n\nPlease see the documentation about [adding new exercises](https://github.com/exercism/docs/blob/master/you-can-help/make-up-new-exercises.md).\n\nNote that:\n\n- Each exercise must stand on its own. Do not reference files outside the exercise directory. They will not be included when the user fetches the exercise.\n- Exercises may use any library subject to licensing restrictions, make sure dependencies are updated in the package.json file for the exercise.\n- Exercises must conform to the Exercism-wide standards described in [the documentation](https://github.com/exercism/docs/tree/master/language-tracks/exercises).\n- Each exercise should have a test suite, an example solution, and build configuration files for node and Bucklescript. The CI build expects ReasonML files to be named ending in .re\n- Be sure to add it to the appropriate place in the `config.json` file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexercism%2Freasonml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fexercism%2Freasonml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexercism%2Freasonml/lists"}