{"id":22302824,"url":"https://github.com/mattludwigs/containers","last_synced_at":"2025-07-29T03:33:20.407Z","repository":{"id":57485605,"uuid":"88171293","full_name":"mattludwigs/containers","owner":"mattludwigs","description":"Functional container like data structures for better runtime safety and polymorphism","archived":false,"fork":false,"pushed_at":"2020-08-03T03:45:13.000Z","size":48,"stargazers_count":12,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-29T00:53:17.465Z","etag":null,"topics":["elixir","elixir-lang","functional-programming"],"latest_commit_sha":null,"homepage":"https://hex.pm/packages/containers","language":"Elixir","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/mattludwigs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2017-04-13T14:04:26.000Z","updated_at":"2023-04-04T10:25:20.000Z","dependencies_parsed_at":"2022-09-01T23:00:11.560Z","dependency_job_id":null,"html_url":"https://github.com/mattludwigs/containers","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/mattludwigs/containers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattludwigs%2Fcontainers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattludwigs%2Fcontainers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattludwigs%2Fcontainers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattludwigs%2Fcontainers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mattludwigs","download_url":"https://codeload.github.com/mattludwigs/containers/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattludwigs%2Fcontainers/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267623109,"owners_count":24117127,"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","status":"online","status_checked_at":"2025-07-29T02:00:12.549Z","response_time":2574,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["elixir","elixir-lang","functional-programming"],"created_at":"2024-12-03T18:41:34.796Z","updated_at":"2025-07-29T03:33:20.125Z","avatar_url":"https://github.com/mattludwigs.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Containers\n\nContainers are functional like data structures that help provide greater runtime safety and polymorphism.\n\nThis package is dependency free. There are some dev only deps, but the package only relies on Elixir.\n\n## Protocols\n\n  * `Appendable` - A container that provides an interface of `append`. Safe against `nil` values.\n    Namely when passing a container with the value `nil` into either the first of second argument\n    to `append`, the other value is not change and there is no runtime error.\n  * `Mappable` - A container that provides an interface to `map`. When `map` is called on a container that\n    has a `nil` value that container just passes through with out the mapping function being called, and\n    this helps prevent runtime errors.\n  * `Sequenceable` - A container that provides an interface of `next`. This allows the chaining of computations.\n  * `Unwrappable`  - A container that provides an interface to `safe` and `unsafe` unwrapping of inner value. Safe\n    will need a default in case of `nil` value of container, helping prevent runtime errors. Unsafe will just return\n    the value of the container regardless of a `nil` value potentially causing runtime errors\n  * `Joinable` - A container that has a nested container of the same type, and is able to be join down into\n     a single representation of the structure.\n\nSince these are protocols, and highly decoupled, a developer can implement them as needed on their own structs.\n\n## Installation\n\nThe package can be installed by adding `containers` to your list of dependencies in `mix.exs`:\n\n```elixir\ndef deps do\n  [{:containers, \"~\u003e 0.7.1\"}]\nend\n```\n\n# Note\n\nUntil version `1.0.0` assume minor changes (that is the number in the second spot) to reflect breaking changes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmattludwigs%2Fcontainers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmattludwigs%2Fcontainers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmattludwigs%2Fcontainers/lists"}