{"id":15289149,"url":"https://github.com/frees-io/iota","last_synced_at":"2025-08-15T18:34:09.076Z","repository":{"id":57716407,"uuid":"88099873","full_name":"frees-io/iota","owner":"frees-io","description":"Fast [co]product types with a clean syntax. For Cats \u0026 Scalaz.","archived":false,"fork":false,"pushed_at":"2019-09-24T07:38:06.000Z","size":438,"stargazers_count":178,"open_issues_count":20,"forks_count":22,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-06-07T23:52:45.533Z","etag":null,"topics":["algebra","coproduct","functional-programming","iota","performance-tuning","scala"],"latest_commit_sha":null,"homepage":"","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/frees-io.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null}},"created_at":"2017-04-12T22:00:41.000Z","updated_at":"2025-02-27T19:48:05.000Z","dependencies_parsed_at":"2022-08-25T09:21:45.779Z","dependency_job_id":null,"html_url":"https://github.com/frees-io/iota","commit_stats":null,"previous_names":["47deg/iota"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/frees-io/iota","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frees-io%2Fiota","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frees-io%2Fiota/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frees-io%2Fiota/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frees-io%2Fiota/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/frees-io","download_url":"https://codeload.github.com/frees-io/iota/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frees-io%2Fiota/sbom","scorecard":{"id":4107,"data":{"date":"2025-08-04","repo":{"name":"github.com/frees-io/iota","commit":"76627bc8de9d38048a7b4be12531fa666a5ac878"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":3.6,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":4,"reason":"Found 9/21 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 19 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-14T13:10:52.933Z","repository_id":57716407,"created_at":"2025-08-14T13:10:52.933Z","updated_at":"2025-08-14T13:10:52.933Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270611964,"owners_count":24616106,"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-08-15T02:00:12.559Z","response_time":110,"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":["algebra","coproduct","functional-programming","iota","performance-tuning","scala"],"created_at":"2024-09-30T15:59:25.617Z","updated_at":"2025-08-15T18:34:09.039Z","avatar_url":"https://github.com/frees-io.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n[comment]: # (Start Badges)\n\n[![Build Status](https://travis-ci.org/frees-io/iota.svg?branch=master)](https://travis-ci.org/frees-io/iota) [![Maven Central](https://img.shields.io/badge/maven%20central-0.3.10-green.svg)](https://oss.sonatype.org/#nexus-search;gav~io.frees~iota*) [![License](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://raw.githubusercontent.com/frees-io/iota/master/LICENSE) [![Latest version](https://img.shields.io/badge/iota-0.3.10-green.svg)](https://index.scala-lang.org/frees-io/iota) [![Scala.js](http://scala-js.org/assets/badges/scalajs-0.6.22.svg)](http://scala-js.org) [![GitHub Issues](https://img.shields.io/github/issues/frees-io/iota.svg)](https://github.com/frees-io/iota/issues)\n\n[comment]: # (End Badges)\n\n# Iota\n\n## Introduction\n\nIota is a tiny library for fast coproduct types with a syntax\nthat cleanly supports the disjunction of any number of types.\n\nTraditional coproduct implementations are implemented as binary trees\nor linked lists at both the type and value level. The syntax for\ntraditional coproducts frequently becomes unwieldy as the number of\ndisjunct types grows.\n\n```scala\n// a coproduct of types using scala.util.Either\ntype EitherFoo = Either[Int, Either[String, Double]]\n\n// a coproduct of type constructors using cats.data.EitherK\nimport cats.data.EitherK\ntype EitherKBar0[A] = EitherK[List, Seq, A]\ntype EitherKBar[A]  = EitherK[Option, EitherKBar0, A]\n\n// a coproduct of type constructors using scalaz.Coproduct\nimport scalaz.Coproduct\ntype CoproductKBar0[A] = Coproduct[List, Seq, A]\ntype CoproductKBar[A]  = Coproduct[Option, CoproductKBar0, A]\n```\n\nIota coproducts are linked lists at the type level. At the value level,\nIota stores the index of the disjunct value's type for quick and\nconstant time access of the values. This syntax scales cleanly to\nsupport any number of disjunct types.\n\n```scala\n// for cats\nimport iota._\nimport TList.::\nimport TListK.:::\n\n// a coproduct of types\ntype Foo = Cop[Int :: String :: Double :: TNil]\n\n// a coproduct of type constructors\ntype Bar[A] = CopK[Option ::: List ::: Seq ::: TNilK, A]\n```\n\n```scala\n// for scalaz\nimport iotaz._\nimport TList.::\nimport TListK.:::\n\n// a coproduct of types\ntype Foo = Cop[Int :: String :: Double :: TNil]\n\n// a coproduct of type constructors\ntype Bar[A] = CopK[Option ::: List ::: Seq ::: TNilK, A]\n```\n\n## Installation\n\nTo get started with SBT, simply add the following to your build.sbt file.\n\nFor Scala 2.11.x and 2.12.x:\n\n[comment]: # (Start Replace)\n\n```scala\nlibraryDependencies += \"io.frees\" %% \"iota-core\"  % \"0.3.10\" // for cats\nlibraryDependencies += \"io.frees\" %% \"iotaz-core\" % \"0.3.10\" // for scalaz\n```\n\nOr, if using Scala.js (0.6.x):\n\n```scala\nlibraryDependencies += \"io.frees\" %%% \"iota-core\"  % \"0.3.10\" // for cats\nlibraryDependencies += \"io.frees\" %%% \"iotaz-core\" % \"0.3.10\" // for scalaz\n```\n\n[comment]: # (End Replace)\n\n## Cats vs Scalaz\n\nIota requires either Cats or Scalaz. If you're using Scalaz, use the \"iotaz\"\nmodules and import from the `iotaz` package (instead of `iota`).\n\nCats friendly terminology (such as \"FunctionK\") is used in the iota\nmodules while Scalaz friendly terminology (such as\n\"NaturalTransformation\") is used in the iotaz modules. If you find an\nissue or inconsistency, please file a GitHub issue and it will be fixed.\n\nThe Cats examples will work against Scalaz, and vise versa, so long as the\nlibrary specific terminology is adjusted. Expect more Scalaz examples as the\nIota library evolves.\n\n## Documentation\nSee [docs/cats.md](docs/cats.md) for the Cats specific documentation and\n[docs/scalaz.md](docs/scalaz.md) for the Scalaz specific documentation.\n\n## Iota in the wild\n\nIf you wish to add your library here please consider a PR to include it in the list below.\n\n## Commercial Support\n\n47 Degrees offers commercial support for the iota library and associated technologies. To find out more, visit [47 Degrees' Open Source Support](https://www.47deg.com/services/open-source-support/).\n\n[comment]: # (Start Copyright)\n# Copyright\n\nIota is designed and developed by 47 Degrees\n\nCopyright (C) 2016-2018 47 Degrees. \u003chttp://47deg.com\u003e\n\n[comment]: # (End Copyright)\n\n[free example]: modules/tests/src/test/scala/iotatests/FreeCopKTests.scala","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrees-io%2Fiota","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrees-io%2Fiota","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrees-io%2Fiota/lists"}