{"id":32159804,"url":"https://github.com/sheyll/newtype-zoo","last_synced_at":"2026-02-22T19:01:06.513Z","repository":{"id":56873692,"uuid":"209580896","full_name":"sheyll/newtype-zoo","owner":"sheyll","description":"A Zoo of Haskell Newtype Wrappers","archived":false,"fork":false,"pushed_at":"2020-11-30T04:59:42.000Z","size":44,"stargazers_count":14,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-12-08T08:46:22.065Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Haskell","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/sheyll.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-09-19T14:54:28.000Z","updated_at":"2020-11-30T04:59:45.000Z","dependencies_parsed_at":"2022-08-20T10:11:01.957Z","dependency_job_id":null,"html_url":"https://github.com/sheyll/newtype-zoo","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/sheyll/newtype-zoo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sheyll%2Fnewtype-zoo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sheyll%2Fnewtype-zoo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sheyll%2Fnewtype-zoo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sheyll%2Fnewtype-zoo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sheyll","download_url":"https://codeload.github.com/sheyll/newtype-zoo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sheyll%2Fnewtype-zoo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29723573,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T15:10:41.462Z","status":"ssl_error","status_checked_at":"2026-02-22T15:10:04.636Z","response_time":110,"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":"2025-10-21T13:19:21.447Z","updated_at":"2026-02-22T19:01:06.507Z","avatar_url":"https://github.com/sheyll.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# General Purpose Newtype Wrappers\n\n**A zoo of `newtype` wrappers.**\n\n* [newtype-zoo on Hackage](https://hackage.haskell.org/package/newtype-zoo)\n\nIn everyday Haskell programming newtype wrappers occur again and again, to\nconvey some extra meaning for the maintainer of the code, and to prevent\nmixing up parameters to functions with the same type.\n\nFor example:\n\n```haskell\napplyConfiguration :: MyConfig -\u003e MyConfig -\u003e IO MyConfig\n```\n\nWhat the user actually wanted to express was:\n\n```haskell\napplyConfiguration :: Wanted MyConfig -\u003e Current MyConfig -\u003e IO (Active MyConfig)\n```\n\nThe newtype wrappers in this library are all exported by\nthe [`NewtypeZoo`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo.html) module, or can\nbe imported individually.\n\nThis simple library contains a variety of simple newtype wrappers:\n\n* [`Active`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Active.html)\n* [`Allocated`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Allocated.html)\n* [`Broken`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Broken.html)\n* [`Cached`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Cached.html)\n* [`Complete`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Complete.html)\n* [`Completed`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Completed.html)\n* [`Consistent`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Consistent.html)\n* [`Current`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Current.html)\n* [`Disabled`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Disabled.html)\n* [`Enabled`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Enabled.html)\n* [`Established`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Established.html)\n* [`Existing`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Existing.html)\n* [`Failed`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Failed.html)\n* [`Inconsistent`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Inconsistent.html)\n* [`Invalid`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Invalid.html)\n* [`Marked`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Marked.html)\n* [`Missing`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Missing.html)\n* [`Multiple`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Multiple.html)\n* [`Needed`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Needed.html)\n* [`New`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-New.html)\n* [`Next`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Next.html)\n* [`Obsolete`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Obsolete.html)\n* [`Offered`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Offered.html)\n* [`Old`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Old.html)\n* [`Partial`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Partial.html)\n* [`Pending`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Pending.html)\n* [`Previous`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Previous.html)\n* [`Proposed`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Proposed.html)\n* [`Rejected`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Rejected.html)\n* [`Remaining`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Remaining.html)\n* [`Replied`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Replied.html)\n* [`Required`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Required.html)\n* [`Requested`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Requested.html)\n* [`Responded`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Responded.html)\n* [`Single`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Single.html)\n* [`Unchecked`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Unchecked.html)\n* [`Unwanted`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Unwanted.html)\n* [`Updated`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Updated.html)\n* [`Valid`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Valid.html)\n* [`Wanted`](https://hackage.haskell.org/package/newtype-zoo/docs/NewtypeZoo-Wanted.html)\n\nThey live in the sub directory `NewtypeZoo`, e.g. `NewtypeZoo.Active`.\n\nThis library offers **shorter code** for the special cases.\nThe `tagged` library is more general, but requires **more code**.\n\nThe reason why I prefer this library in some cases, is shorter type signatures.\n\nOne can even combine `tagged` with `newtype-zoo` (I think I will add this to the README):\n\n```haskell\n\nimport Data.Tagged\nimport NewtypeZoo.Current\nimport NewtypeZoo.Wanted\n\napplyConfigurationTagged\n  :: Tagged Wanted MyConfig\n  -\u003e Tagged Current MyConfig\n  -\u003e IO (Tagged Current MyConfig)\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsheyll%2Fnewtype-zoo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsheyll%2Fnewtype-zoo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsheyll%2Fnewtype-zoo/lists"}