{"id":253025,"name":"yoko","ecosystem":"hackage","description":"Based off of the paper \"A Pattern for Almost Homomorphic Functions\"\nat http://www.ittc.ku.edu/~nfrisby/frisby-wgp-2012.pdf, presented at the\nWorkshop on Generic Programming 2012. Also, my\ndissertation http://www.ittc.ku.edu/~nfrisby/frisby-dissertation.pdf\n\nyoko views a nominal datatype as a band of constructors, each\na nominal type in its own right. Such datatypes can be disbanded via the\ndisband function into an anonymous sum of nominal constructors, and vice\nversa via the band function. This library uses extensive type-level\nprogramming to enrich its instant-generics foundation with capabilities\nderived from the constructor-centric perspective.\n\nFor example, consider the following nominal datatype.\n\nThis type can of course be understood as a sum of the individual\nfields types.\n\nyoko's conceptual foundations start there. In particular, this allows a\nconstructor, say John, to be used independently of its original range type\nand sibling constructors.\n\nAs a generic programming library, yoko extends instant-generics with\nsupport for constructor-centric generic programming. The\nExamples/LambdaLift/LambdaLift.hs file distributed with the yoko source\ndemonstrates defining a lambda-lifting conversion between the two types\nULC, which has lambdas, and Prog, which has top-level function\ndeclarations instead.\n\nThese types are defined in separate modules, since they have constructors\nwith the same name. Indeed, the fact that they having matching constructors\nnamed App is crucial for yoko's automatic conversion from ULC's App\nto TLF's App. As written, the generic lambda-lifter would continue to\nwork for any new ULC constructors (e.g. syntax for tuples or mutable\nreferences) as long as constructors with the same names and analogous fields\nwere added to TLF and the semantics of those constructors doesn't involve\nbinding. This default generic behavior of the lambda-lifter is specified in\nabout ten lines of user code.\n\nThe non-generic code is much more complicated. This is intentional: I wanted\nto show that sometimes shoehorning an algorithm into the requisite type (ie\na -\u003e m a') can be difficult and require subtleties like backwards state.\n\nExisting generic libraries don't use constructor names to the degree that\nyoko does, and so cannot accomodate generic conversions as well.","homepage":null,"licenses":"BSD-3-Clause","normalized_licenses":["BSD-3-Clause"],"repository_url":"https://github.com/nfrisby/yoko","keywords_array":["bsd3","generics","library","reflection","Propose Tags"],"namespace":null,"versions_count":13,"first_release_published_at":"2011-11-27T01:27:40.000Z","latest_release_published_at":"2012-09-26T04:51:49.000Z","latest_release_number":"2.0","last_synced_at":"2026-10-09T10:22:16.057Z","created_at":"2022-04-06T04:16:10.739Z","updated_at":"2026-10-09T10:22:30.347Z","registry_url":"https://hackage.haskell.org/package/yoko","install_command":"cabal install yoko","documentation_url":null,"metadata":{},"repo_metadata":{"id":64846305,"uuid":"3819411","full_name":"nfrisby/yoko","owner":"nfrisby","description":"generic programming with disbanded data types","archived":false,"fork":false,"pushed_at":"2012-09-30T06:03:51.000Z","size":384,"stargazers_count":3,"open_issues_count":2,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-09-14T17:46:47.390Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nfrisby.png","metadata":{},"created_at":"2012-03-24T19:06:18.000Z","updated_at":"2021-09-03T04:36:54.000Z","dependencies_parsed_at":"2022-12-16T20:53:30.668Z","dependency_job_id":null,"html_url":"https://github.com/nfrisby/yoko","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nfrisby/yoko","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nfrisby%2Fyoko","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nfrisby%2Fyoko/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nfrisby%2Fyoko/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nfrisby%2Fyoko/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nfrisby","download_url":"https://codeload.github.com/nfrisby/yoko/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nfrisby%2Fyoko/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":343680568,"owners_count":38139634,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-09T02:00:07.585Z","response_time":55,"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"},"owner_record":{"login":"nfrisby","name":"Nicolas Frisby","uuid":"1106131","kind":"user","description":"","email":"","website":null,"location":"Los Angeles","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/1106131?u=433da697048da68ac97cb3fb9421dd6337b3196b\u0026v=4","repositories_count":11,"last_synced_at":"2023-03-22T23:05:24.022Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/nfrisby","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-03T13:52:47.010Z","updated_at":"2023-03-22T23:05:24.030Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nfrisby","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nfrisby/repositories"},"tags":[]},"repo_metadata_updated_at":"2026-10-09T10:22:30.347Z","dependent_packages_count":0,"downloads":8785,"downloads_period":"total","dependent_repos_count":0,"rankings":{"downloads":17.863803334275218,"dependent_repos_count":57.976829612885,"dependent_packages_count":19.27098050296694,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":31.703871150042385},"purl":"pkg:hackage/yoko","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/hackage/yoko","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/hackage/yoko","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/hackage/yoko/dependencies","status":null,"funding_links":[],"critical":false,"issue_metadata":{"last_synced_at":"2026-09-14T17:22:54.088Z","issues_count":1,"pull_requests_count":1,"avg_time_to_close_issue":null,"avg_time_to_close_pull_request":null,"issues_closed_count":0,"pull_requests_closed_count":0,"pull_request_authors_count":1,"issue_authors_count":1,"avg_comments_per_issue":1.0,"avg_comments_per_pull_request":0.0,"merged_pull_requests_count":0,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/nfrisby%2Fyoko/issues","maintainers":[],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/hackage.haskell.org/packages/yoko/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/hackage.haskell.org/packages/yoko/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/hackage.haskell.org/packages/yoko/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/hackage.haskell.org/packages/yoko/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/hackage.haskell.org/packages/yoko/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/hackage.haskell.org/packages/yoko/codemeta","maintainers":[{"uuid":"NicolasFrisby","login":"NicolasFrisby","name":null,"email":null,"url":null,"packages_count":15,"html_url":"https://hackage.haskell.org/user/NicolasFrisby","role":null,"created_at":"2022-11-14T20:28:04.028Z","updated_at":"2022-11-14T20:28:04.028Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/hackage.haskell.org/maintainers/NicolasFrisby/packages"}]}