{"id":16630849,"url":"https://github.com/ravicious/kata-tennis","last_synced_at":"2025-07-24T23:03:50.387Z","repository":{"id":66976492,"uuid":"65676294","full_name":"ravicious/kata-tennis","owner":"ravicious","description":"Elm version of Mark Seemann's KataTennis.","archived":false,"fork":false,"pushed_at":"2016-09-05T20:07:55.000Z","size":16,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-18T06:11:23.323Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Elm","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ravicious.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":"2016-08-14T16:42:53.000Z","updated_at":"2016-10-16T15:50:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"b2fefb81-e6d2-4a37-bc51-8a26ce9b17bc","html_url":"https://github.com/ravicious/kata-tennis","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravicious%2Fkata-tennis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravicious%2Fkata-tennis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravicious%2Fkata-tennis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravicious%2Fkata-tennis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ravicious","download_url":"https://codeload.github.com/ravicious/kata-tennis/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243092992,"owners_count":20235276,"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":[],"created_at":"2024-10-12T04:49:34.609Z","updated_at":"2025-03-11T18:38:12.544Z","avatar_url":"https://github.com/ravicious.png","language":"Elm","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kata-tennis\n\nThis repo contains an implementation of [Mark Seemann's KataTennis](https://github.com/ploeh/KataTennis) in Elm.\n\nMark wrote an article series called [Types + Properties = Software](http://blog.ploeh.dk/2016/02/10/types-properties-software/).\n\n\u003e The stronger a language's type system is, the more you can use static types to model your\n\u003e application's problem domain. With a sufficiently strong type system, you can make illegal states\n\u003e unrepresentable. While states are guaranteed to be legal, transitions between states need not be.\n\u003e You can often use Property-Based Testing to ensure that the state transitions are correct. The\n\u003e combination of types and properties give you a simple, but surprisingly powerful way of specifying\n\u003e the behaviour of the software you create.\n\nEach article from the series has its own commit:\n\n* [`ec3c836`](https://github.com/ravicious/kata-tennis/commit/ec3c836) – [Designing with types](http://blog.ploeh.dk/2016/02/10/types-properties-software/)\n* [`8bb7123`](https://github.com/ravicious/kata-tennis/commit/8bb7123) – [State transition properties](http://blog.ploeh.dk/2016/02/11/types-properties-software-state-transition-properties)\n* [`6e5b06f`](https://github.com/ravicious/kata-tennis/commit/6e5b06f) – [Properties for the advantage state](http://blog.ploeh.dk/2016/02/12/types-properties-software-properties-for-the-advantage-state)\n* [`90fd83d`](https://github.com/ravicious/kata-tennis/commit/90fd83d) – [Properties for the Forties](http://blog.ploeh.dk/2016/02/15/types-properties-software-properties-for-the-forties)\n* [`3b06ca9`](https://github.com/ravicious/kata-tennis/commit/3b06ca9) \u0026 [`3f61ad0`](https://github.com/ravicious/kata-tennis/commit/3f61ad0) \u0026 [`4b0fd64`](https://github.com/ravicious/kata-tennis/commit/4b0fd64) – [Composition](http://blog.ploeh.dk/2016/02/16/types-properties-software-composition)\n* [`0ae1df3`](https://github.com/ravicious/kata-tennis/commit/0ae1df3) – [Initial state](http://blog.ploeh.dk/2016/02/17/types-properties-software-initial-state) \u0026 [Finite state machine](http://blog.ploeh.dk/2016/02/18/types-properties-software-finite-state-machine)\n* [`22394a2`](https://github.com/ravicious/kata-tennis/commit/22394a2) – [Other properties](http://blog.ploeh.dk/2016/02/19/types-properties-software-other-properties)\n\n## Running tests\n\nTo run tests, install [node-test-runner](https://github.com/rtfeldman/node-test-runner), go to the root of the repo and call `elm test` from the terminal.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fravicious%2Fkata-tennis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fravicious%2Fkata-tennis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fravicious%2Fkata-tennis/lists"}