{"id":16579998,"url":"https://github.com/tfausak/autoexporter","last_synced_at":"2025-08-23T01:45:19.851Z","repository":{"id":4175919,"uuid":"52222779","full_name":"tfausak/autoexporter","owner":"tfausak","description":":outbox_tray: Automatically re-export Haskell modules.","archived":false,"fork":false,"pushed_at":"2025-02-01T21:59:49.000Z","size":113,"stargazers_count":32,"open_issues_count":0,"forks_count":4,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-02-27T13:35:52.230Z","etag":null,"topics":["haskell","preprocessor"],"latest_commit_sha":null,"homepage":"https://hackage.haskell.org/package/autoexporter","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tfausak.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","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":"2016-02-21T19:07:07.000Z","updated_at":"2025-02-01T21:56:16.000Z","dependencies_parsed_at":"2023-07-05T17:00:42.685Z","dependency_job_id":"cb2749db-c2a1-4424-8ee2-7c27fd64a847","html_url":"https://github.com/tfausak/autoexporter","commit_stats":null,"previous_names":[],"tags_count":44,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfausak%2Fautoexporter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfausak%2Fautoexporter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfausak%2Fautoexporter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfausak%2Fautoexporter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tfausak","download_url":"https://codeload.github.com/tfausak/autoexporter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243830922,"owners_count":20354850,"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","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":["haskell","preprocessor"],"created_at":"2024-10-11T22:19:49.537Z","updated_at":"2025-03-16T20:31:39.760Z","avatar_url":"https://github.com/tfausak.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Autoexporter\n\n[![CI](https://github.com/tfausak/autoexporter/actions/workflows/ci.yml/badge.svg)](https://github.com/tfausak/autoexporter/actions/workflows/ci.yml)\n[![Hackage](https://badgen.net/hackage/v/autoexporter)](https://hackage.haskell.org/package/autoexporter)\n\nAutoexporter automatically re-exports Haskell modules.\n\nLet's say you have a module `M` that just exports some other modules. It might\nlook like this:\n\n``` haskell\nmodule M\n  ( module M.A\n  , module M.B\n  ) where\n\nimport M.A\nimport M.B\n```\n\nThis code is error-prone. If you add a new module, say `M.C`, you have to\nremember to come back to this file and re-export it. And this code is tedious\nto write. You have to list each module twice. You can do a little better, but\nnot much.\n\n``` haskell\nmodule M (module X) where\nimport M.A as X\nimport M.B as X\n```\n\nNow you don't have to write every module twice, but you still have to remember\nto re-export everything. And the generated documentation for this module\ndoesn't include anything about the exported modules.\n\nAutoexporter handles this for you. Instead of either of the above approaches,\nsimply drop this into the `M` module:\n\n``` haskell\n{-# OPTIONS_GHC -F -pgmF autoexporter #-}\n```\n\nThat will generate code that looks like this:\n\n``` haskell\nmodule M (\n  module M.A,\n  module M.B,\n) where\nimport M.A\nimport M.B\n```\n\nAutoexporter will generally behave as you'd expect, but there are a couple\nthings to look out for:\n\n- You cannot selectively include or exclude any modules.\n\n- By default, only immediate children will be re-exported. If you use this in\n  some module `M`, it won't pull in `M.A.B`. If you need deep re-exporting,\n  please pass `--deep` to Autoexporter like this:\n\n  ```haskell\n  {-# OPTIONS_GHC -F -pgmF autoexporter -optF --deep #-}\n  ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftfausak%2Fautoexporter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftfausak%2Fautoexporter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftfausak%2Fautoexporter/lists"}