{"id":14557478,"url":"https://github.com/exercism/ocaml","last_synced_at":"2025-05-08T21:43:26.388Z","repository":{"id":14558202,"uuid":"17273866","full_name":"exercism/ocaml","owner":"exercism","description":"Exercism exercises in OCaml.","archived":false,"fork":false,"pushed_at":"2025-04-14T22:41:43.000Z","size":24712,"stargazers_count":99,"open_issues_count":17,"forks_count":52,"subscribers_count":15,"default_branch":"main","last_synced_at":"2025-05-08T21:43:24.156Z","etag":null,"topics":["community-contributions-paused","exercism-track","maintained"],"latest_commit_sha":null,"homepage":"https://exercism.org/tracks/ocaml","language":"OCaml","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":"2014-02-28T03:23:52.000Z","updated_at":"2025-05-04T19:25:08.000Z","dependencies_parsed_at":"2023-12-07T02:32:57.095Z","dependency_job_id":"99b56a24-dba1-4d72-b0ba-c2af421646e1","html_url":"https://github.com/exercism/ocaml","commit_stats":{"total_commits":634,"total_committers":57,"mean_commits":11.12280701754386,"dds":0.7145110410094637,"last_synced_commit":"142d06ef66bb775d1b46b49572e6a64bcce0a315"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Focaml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Focaml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Focaml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Focaml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/exercism","download_url":"https://codeload.github.com/exercism/ocaml/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253153761,"owners_count":21862406,"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","maintained"],"created_at":"2024-09-06T20:01:21.308Z","updated_at":"2025-05-08T21:43:26.359Z","avatar_url":"https://github.com/exercism.png","language":"OCaml","readme":"# Exercism OCaml Track\n\nExercism Exercises in OCaml\n\n## Contributing Guide\n\nContributions to the OCaml track (or any other part of Exercism) are very welcome!\n\nPlease see the [contributing guide](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/README.md) for overall guidance. The below\nnotes contain a few details specific to Ocaml.\n\n## Getting started\n\n### Local setup\n\n**Prerequesites**\n\n* OCaml `5.1`\n* opam\n* make\n\n```sh\ngit clone https://github.com/exercism/ocaml.git\ncd ocaml\ngit submodule update --init --recursive\n\n# see https://github.com/exercism/ocaml/blob/master/.travis/Dockerfile#L12\n# might take a while\nmake install_deps\n\n# Run generator tests\nmake test_generator\n\n# Execute generator\nmake generate_exercises\n\n# Run exercise tests\nmake test\n```\n\n\u003cdetails\u003e\n    \u003csummary\u003eContainer setup\u003c/summary\u003e\n\n\n**Prerequesites**\n\n* VSCode\n* VSCode Remote Containers extension\n* Docker\n\n```sh\ngit clone https://github.com/exercism/ocaml.git\ncd ocaml\ngit submodule update --init --recursive\n\nvscode .\n\n# Inside container\n\n# Run generator tests\nmake test_generator\n\n# Execute generator\nmake generate_exercises\n\n# Run exercise tests\nmake test\n```\n\n\u003c/details\u003e\n\n## Adding an Exercise\n\nThe [contributing guide](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/README.md) provides guidance on\nhow to add a new exercise, or port an existing exercise from another language track.\n\nThis is a brief guide, with specifics for the OCaml track.\n\nFirstly, register the exercise in [config json](https://exercism.org/docs/building/tracks/config-json). The name of the exercise should go in the \"slug\" entry.\n\nThen, write the exercise tests and proof of concept implementation.\nA folder layout for an exercise called \"ocaml-exercise\" is below.\n\n```\n└── templates\n    └── ocaml-exercise\n        ├── example.ml.tpl           (a proof of concept implementation)\n        ├── ocaml_exercise.mli.tpl   (the interface definition for the exercise)\n        ├── HINTS.md.tpl             (additional hints to anyone trying the exercise - optional)\n        ├── Makefile                 (standard - copy this from any of the other Ocaml exercises)\n        └── test.ml.tpl              (unit tests)\n```\n\nYou can build your exercises from `templates/ocaml-exercise` to `exercises/ocaml-exercise` via the test generator:\n\n```sh\nmake generate_exercises\n```\n\nThis creates a folder `exercises/ocaml-exercises` that mirrors `templates/ocaml-exercises` and strips the `.tpl` extension:\n\n```\n└── templates\n    └── ocaml-exercise\n        ├── example.ml\n        ├── ocaml_exercise.mli\n        ├── HINTS.md\n        ├── Makefile\n        └── test.ml\n```\n\n## Canonical test data\n\nIf you are implementing an existing test, there may be \"canonical data\" for it in the [problem-specifications](https://github.com/exercism/problem-specifications) repository.\nAn example: https://github.com/exercism/problem-specifications/blob/4531f54300f2a9f485a91a5dc0228be448b46b97/exercises/hello-world/canonical-data.json#L1-L12\n\nYou should base your tests off this data, in order to provide consistency across different language tracks.\n\n## Feedback\n\nIf you find this documentation is inaccurate or incomplete, or can be improved in any way, please don't hesitate to raise an [issue](https://github.com/exercism/ocaml/issues) or submit a pull request.\n\n\n### OCaml icon\nThe [OCaml](https://ocaml.org) logo is released under the [Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/) license.\n","funding_links":["https://github.com/sponsors/exercism","https://exercism.org/donate"],"categories":["OCaml"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexercism%2Focaml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fexercism%2Focaml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexercism%2Focaml/lists"}