{"id":227535,"name":"safe-globals","ecosystem":"hackage","description":"This library provides a way to declare IORefs, TVars, Chans, etc.\nat the top level of a module.\n\nDeclarations are safe.  User code does not invoke unsafePerformIO\nor compiler pragmas.\n\nVariables are ordinary module-level bindings.  Their scope can be\ncontrolled through the usual module import/export mechanism.  Unrelated\ncode cannot interfere with private variables by guessing some global\nidentifier.\n\nReferences are statically typed, and polymorphic references are statically\nforbidden.\n\nThe implementation is simple, and closely follows existing common practice.\n\nThis library does not prevent the software design problems caused by global\nstate.  Rather, it provides some implementation safety for those\ncircumstances where global state really is necessary.\n\nFundamentally this library just provides Template Haskell macros for the\nusual unsafePerformIO trick, so it is subject to the same caveats.  In\nparticular, linking a module and then loading the same module dynamically\nthrough the GHC API may produce two copies of the same top-level variable.\nSee the documentation of unsafePerformIO for additional compiler-specific\nrequirements.\n\nThis library may not work properly on GHC before 7.4, due to a GHC bug:\nhttp://hackage.haskell.org/trac/ghc/ticket/5558","homepage":null,"licenses":"BSD-3-Clause","normalized_licenses":["BSD-3-Clause"],"repository_url":"https://github.com/kmcallister/safe-globals","keywords_array":["bsd3","data","library","Propose Tags"],"namespace":null,"versions_count":2,"first_release_published_at":"2011-10-18T07:08:52.000Z","latest_release_published_at":"2011-12-21T16:50:23.000Z","latest_release_number":"0.1.1","last_synced_at":"2026-09-12T08:22:15.833Z","created_at":"2022-04-06T01:06:08.491Z","updated_at":"2026-09-12T19:43:02.244Z","registry_url":"https://hackage.haskell.org/package/safe-globals","install_command":"cabal install safe-globals","documentation_url":null,"metadata":{},"repo_metadata":{"id":138705857,"uuid":"2597292","full_name":"kmcallister/safe-globals","owner":"kmcallister","description":"Safe top-level mutable variables for Haskell, which scope like ordinary values","archived":false,"fork":false,"pushed_at":"2016-09-28T03:51:42.000Z","size":100,"stargazers_count":3,"open_issues_count":3,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-24T21:41:58.131Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://hackage.haskell.org/package/safe-globals","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kmcallister.png","metadata":{"files":{"readme":"README","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":"2011-10-18T06:49:50.000Z","updated_at":"2015-10-20T04:53:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"c113ccbe-5c23-42ca-b3e2-9a27944da897","html_url":"https://github.com/kmcallister/safe-globals","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/kmcallister/safe-globals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kmcallister%2Fsafe-globals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kmcallister%2Fsafe-globals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kmcallister%2Fsafe-globals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kmcallister%2Fsafe-globals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kmcallister","download_url":"https://codeload.github.com/kmcallister/safe-globals/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kmcallister%2Fsafe-globals/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":341189360,"owners_count":37247072,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-22T15:14:58.755Z","status":"online","status_checked_at":"2026-09-12T02:00:07.213Z","response_time":57,"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"},"tags":[]},"repo_metadata_updated_at":"2026-09-12T19:43:02.244Z","dependent_packages_count":0,"downloads":2505,"downloads_period":"total","dependent_repos_count":1,"rankings":{"downloads":49.10480100353518,"dependent_repos_count":36.76017789941841,"dependent_packages_count":19.055764625384878,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":34.97358117611282},"purl":"pkg:hackage/safe-globals","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/hackage/safe-globals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/hackage/safe-globals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/hackage/safe-globals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2026-01-24T12:10:06.248Z","issues_count":0,"pull_requests_count":3,"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":3,"issue_authors_count":0,"avg_comments_per_issue":null,"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/kmcallister%2Fsafe-globals/issues","maintainers":[],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/hackage.haskell.org/packages/safe-globals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/hackage.haskell.org/packages/safe-globals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/hackage.haskell.org/packages/safe-globals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/hackage.haskell.org/packages/safe-globals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/hackage.haskell.org/packages/safe-globals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/hackage.haskell.org/packages/safe-globals/codemeta","maintainers":[{"uuid":"KeeganMcAllister","login":"KeeganMcAllister","name":null,"email":null,"url":null,"packages_count":22,"html_url":"https://hackage.haskell.org/user/KeeganMcAllister","role":null,"created_at":"2022-11-14T19:34:28.329Z","updated_at":"2022-11-14T19:34:28.329Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/hackage.haskell.org/maintainers/KeeganMcAllister/packages"}]}