{"id":13623818,"url":"https://github.com/grin-compiler/grin","last_synced_at":"2025-05-16T13:06:43.109Z","repository":{"id":37789881,"uuid":"95253474","full_name":"grin-compiler/grin","owner":"grin-compiler","description":"GRIN is a compiler back-end for lazy and strict functional languages with whole program optimization support.","archived":false,"fork":false,"pushed_at":"2023-04-28T14:15:23.000Z","size":22867,"stargazers_count":1039,"open_issues_count":31,"forks_count":38,"subscribers_count":37,"default_branch":"master","last_synced_at":"2025-04-09T08:06:28.330Z","etag":null,"topics":["compiler","data-flow-analysis","functional-programming","haskell","llvm","optimisation"],"latest_commit_sha":null,"homepage":"https://grin-compiler.github.io/","language":"Haskell","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/grin-compiler.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"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},"funding":{"patreon":"csaba_hruska"}},"created_at":"2017-06-23T20:18:06.000Z","updated_at":"2025-04-07T06:44:27.000Z","dependencies_parsed_at":"2024-05-30T04:34:22.851Z","dependency_job_id":"6b4686fc-806f-41a0-bf85-e31f21b28aa4","html_url":"https://github.com/grin-compiler/grin","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grin-compiler%2Fgrin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grin-compiler%2Fgrin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grin-compiler%2Fgrin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grin-compiler%2Fgrin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grin-compiler","download_url":"https://codeload.github.com/grin-compiler/grin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254535829,"owners_count":22087399,"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":["compiler","data-flow-analysis","functional-programming","haskell","llvm","optimisation"],"created_at":"2024-08-01T21:01:36.019Z","updated_at":"2025-05-16T13:06:43.092Z","avatar_url":"https://github.com/grin-compiler.png","language":"Haskell","funding_links":["https://patreon.com/csaba_hruska","https://www.patreon.com/csaba_hruska"],"categories":["Haskell"],"sub_categories":[],"readme":"# GRIN\n\n[![Build Status](https://travis-ci.org/grin-compiler/grin.svg?branch=master)](https://travis-ci.org/grin-compiler/grin) [![Coverage Status](https://coveralls.io/repos/github/grin-compiler/grin/badge.svg?branch=master)](https://coveralls.io/github/grin-compiler/grin?branch=master)\n[![Gitter chat](https://badges.gitter.im/grin-compiler/grin.png)](https://gitter.im/Grin-Development/Lobby)\n\nThe name GRIN is short for *Graph Reduction Intermediate Notation*, and it is an intermediate language for graph reduction. GRIN is the optimizer and code generator component of the GRIN Compiler project which includes language frontends for *Haskell*, *Idris* and *Agda*.\nTo get the big picture of the project check the [project website](https://grin-compiler.github.io/).\nFor an overview of the optimizer read\n\u003ca href=\"http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/The GRIN Project.pdf\"\u003e\nThe GRIN Project\n\u003c/a\u003e paper. To grasp the details take your time and read Urban Boquist's PhD thesis on\n\u003ca href=\"http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf\"\u003e\nCode Optimisation Techniques for Lazy Functional Languages\n\u003c/a\u003e.\n\n**Presentations**\n- We presented the core ideas of GRIN at Haskell Exchange 2018. [slides](https://docs.google.com/presentation/d/1QsZ3Kyy3XIco-qba1biRmzuMzz8o2uCBqA9DMtnqP2c/edit?usp=sharing) [video](https://skillsmatter.com/skillscasts/12390-grin-an-alternative-haskell-compiler-backend)  \n- The *Next-gen Haskell Compilation Techniques* (2021) presentation gives a high-level overview of the project motivation. [slides](https://docs.google.com/presentation/d/1g_-bHgeD7lV4AYybnvjgkWa9GKuP6QFUyd26zpqXssQ/edit?usp=sharing) [video](https://www.youtube.com/watch?v=jyaR8E325ok) \n\nRead our paper [A modern look at GRIN, an optimizing functional language back end](https://nbviewer.jupyter.org/github/Anabra/grin/blob/65177587f4ea0586801e582f1f3750b2d46351a2/papers/stcs-2019/article/tex/main.pdf) (2019) to get an overview of GRIN related projects and other whole program compilers i.e. *Boquist GRIN, UHC, JHC, LHC, HRC, MLton*\n\nAlso check the GRIN transformation [example from Boquist PhD](http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=317) and an [example from our implementation](https://github.com/grin-compiler/grin/tree/master/grin/grin/sum-simple-output).\n\n## Support\n\nThe project is supported by these awesome [backers](https://github.com/grin-compiler/grin/blob/master/BACKERS.md). Special thanks to our gold sponsors:\n### *Sam Griffin*\n\u003ca href=\"http://holmusk.com/\"\u003e\n  \u003cimg\n    width=\"30%\"\n    src=\"https://raw.githubusercontent.com/grin-compiler/grin-compiler.github.io/master/assets/holmusk/Holmusk_masterlogo_blue.svg\"\n    alt=\"Holmusk logo\" /\u003e\n\u003c/a\u003e\n\nIf you'd like to join them, please consider become a backer or sponsor on [Patreon](https://www.patreon.com/csaba_hruska).  \n\n\u003ca href=\"https://www.patreon.com/csaba_hruska\"\u003e\n\u003cimg src=\"https://c5.patreon.com/external/logo/become_a_patron_button.png\" width=\"150\"/\u003e\n\u003c/a\u003e\n\n## GRIN IR\n\n\u003ca href=\"http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=41\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/grin-compiler/grin/master/images/grin-syntax.png\" width=\"500\" \u003e\n\u003c/a\u003e\n\n## Showcase\n\n![](https://pbs.twimg.com/media/Dpasi9OW4AAxpwi.jpg)\n\n## Setup\n\n### Installing LLVM\n\n#### Homebrew\n\nExample using Homebrew on macOS:\n\n```bash\n$ brew install llvm-hs/llvm/llvm-7\n```\n\n#### Debian/Ubuntu\n\nFor Debian/Ubuntu based Linux distributions, the LLVM.org website provides\nbinary distribution packages. Check [apt.llvm.org](http://apt.llvm.org/) for\ninstructions for adding the correct package database for your OS version, and\nthen:\n\n```bash\n$ apt-get install llvm-7-dev\n```\n\n#### Nix\n\nTo get a nix shell with all the required dependencies do the following in the top level folder.\n\n```\nnix-shell\n```\n\nTo run the example do the following from the top level folder.\n\n```\n(cd grin; cabal run grin -- grin/opt-stages-high-level/stage-00.grin)\n```\n\nTo run a local Hoogle server with Haskell documentation do the following.\n\n```\nhoogle server --port 8087 1\u003e/dev/null 2\u003e/dev/null\u0026\n```\n\n### Build GRIN\n\n```\nstack setup\nstack build\n```\n\n### Usage\n\n```\nstack exec -- grin grin/grin/opt-stages-high-level/stage-00.grin\n```\n## How to Contribute\nSee: [Issues / Tasks for new contributors](https://github.com/grin-compiler/grin/issues/3)\nKeep it simple: We follow the fundamentals laid down in [HaskellerZ - Feb 2018 - Getting things done in Haskell](https://www.youtube.com/watch?v=-X1vrxQUETM)\n\n## Example Front-End\n\nRead about how to \u003ca href=\"http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=64\"\u003egenerate GRIN code\u003c/a\u003e from a frontend language.\n\nAlso check the corresponding [source code](https://github.com/grin-compiler/ghc-grin/tree/master/lambda-grin/src/Lambda).\n\ni.e.\n- [Lambda/Syntax.hs](https://github.com/grin-compiler/ghc-grin/tree/master/lambda-grin/src/Lambda/Syntax.hs) - front-end language defintion\n- [lambda-grin/test](https://github.com/grin-compiler/ghc-grin/tree/master/lambda-grin/test) - directory including generated Lambda and GRIN code\n\n## Simplifying Transformations\n\nTransformation | Schema\n-------------- | ------\n[vectorisation][113]                \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [Vectorisation2.hs]       | [\u003cimg src=\"images/vectorisation.png\"         width=\"500\"\u003e][113]\n[case simplification][116]          \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [CaseSimplification.hs]   | [\u003cimg src=\"images/case-simplification.png\"   width=\"500\"\u003e][116]\n[split fetch operation][118]        \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [SplitFetch.hs]           | [\u003cimg src=\"images/split-fetch-operation.png\" width=\"500\"\u003e][118]\n[right hoist fetch operation][123]  \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [RightHoistFetch2.hs]     | [\u003cimg src=\"images/right-hoist-fetch.png\"     width=\"500\"\u003e][123]\n[register introduction][126]        \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [RegisterIntroduction.hs] | [\u003cimg src=\"images/register-introduction.png\" width=\"500\"\u003e][126]\n\n\n[113]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=113\n[116]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=116\n[118]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=118\n[123]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=123\n[126]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=126\n\n[Vectorisation2.hs]:        https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Simplifying/Vectorisation2.hs\n[CaseSimplification.hs]:    https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Simplifying/CaseSimplification.hs\n[SplitFetch.hs]:            https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Simplifying/SplitFetch.hs\n[RightHoistFetch2.hs]:      https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Simplifying/RightHoistFetch2.hs\n[RegisterIntroduction.hs]:  https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Simplifying/RegisterIntroduction.hs\n\n\n## Optimising Transformations\n\nTransformation | Schema\n-------------- | ------\n[evaluated case elimination][141]         \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [EvaluatedCaseElimination.hs] \u003cbr\u003e\u003cbr\u003e _test:_ \u003cbr\u003e [EvaluatedCaseEliminationSpec.hs]  | [\u003cimg src=\"images/evaluated-case-elimination.png\" width=\"500\"\u003e][141]\n[trivial case elimination][142]           \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [TrivialCaseElimination.hs]   \u003cbr\u003e\u003cbr\u003e _test:_ \u003cbr\u003e [TrivialCaseEliminationSpec.hs]    | [\u003cimg src=\"images/trivial-case-elimination.png\"   width=\"500\"\u003e][142]\n[sparse case optimisation][143]           \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [SparseCaseOptimisation.hs]   \u003cbr\u003e\u003cbr\u003e _test:_ \u003cbr\u003e [SparseCaseOptimisationSpec.hs]    | [\u003cimg src=\"images/sparse-case-optimisation.png\"   width=\"500\"\u003e][143]\n[update elimination][148]                 \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [UpdateElimination.hs]        \u003cbr\u003e\u003cbr\u003e _test:_ \u003cbr\u003e [UpdateEliminationSpec.hs]         | [\u003cimg src=\"images/update-elimination.png\"         width=\"500\"\u003e][148]\n[copy propagation][129]                   \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [CopyPropagation.hs]          \u003cbr\u003e\u003cbr\u003e _test:_ \u003cbr\u003e [CopyPropagationSpec.hs]           | [\u003cimg src=\"images/copy-propagation-left.png\"      width=\"500\"\u003e\u003cimg src=\"images/copy-propagation-right.png\" width=\"500\"\u003e][129]\n[late inlining][151]                      \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [Inlining.hs]                 \u003cbr\u003e\u003cbr\u003e _test:_ \u003cbr\u003e [InliningSpec.hs]                  | [\u003cimg src=\"images/late-inlining.png\"              width=\"500\"\u003e][151]\n[generalised unboxing][134]               \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [GeneralizedUnboxing.hs]      \u003cbr\u003e\u003cbr\u003e _test:_ \u003cbr\u003e [GeneralizedUnboxingSpec.hs]       | [\u003cimg src=\"images/generalised-unboxing.png\"       width=\"500\"\u003e\u003cimg src=\"images/unboxing-of-function-return-values.png\" width=\"500\"\u003e][134]\n[arity raising][160]                      \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [ArityRaising.hs]             \u003cbr\u003e\u003cbr\u003e _test:_ \u003cbr\u003e [ArityRaisingSpec.hs]              | [\u003cimg src=\"images/arity-raising.png\"              width=\"500\"\u003e][160]\n[case copy propagation][144]              \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [CaseCopyPropagation.hs]      \u003cbr\u003e\u003cbr\u003e _test:_ \u003cbr\u003e [CaseCopyPropagationSpec.hs]       | [\u003cimg src=\"images/case-copy-propagation.png\"      width=\"500\"\u003e][144]\n[case hoisting][153]                      \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [CaseHoisting.hs]             \u003cbr\u003e\u003cbr\u003e _test:_ \u003cbr\u003e [CaseHoistingSpec.hs]              | [\u003cimg src=\"images/case-hoisting.png\"              width=\"500\"\u003e][153]\n[whnf update elimination][149]            \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e __TODO__                      \u003cbr\u003e\u003cbr\u003e _test:_ \u003cbr\u003e __TODO__                           | [\u003cimg src=\"images/whnf-update-elimination.png\"    width=\"500\"\u003e][149]\n[common sub-expression elimination][164]  \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [CSE.hs]                      \u003cbr\u003e\u003cbr\u003e _test:_ \u003cbr\u003e [CSESpec.hs]                       | [\u003cimg src=\"images/common-sub-expression-elimination-1.png\" width=\"500\"\u003e\u003cimg src=\"images/common-sub-expression-elimination-2.png\" width=\"500\"\u003e][164]\n[constant propagation][159]               \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [ConstantPropagation.hs]      \u003cbr\u003e\u003cbr\u003e _test:_ \u003cbr\u003e [ConstantPropagationSpec.hs]       |\n[dead function elimination][169]          \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [SimpleDeadFunctionElimination.hs]  \u003cbr\u003e\u003cbr\u003e _test:_ \u003cbr\u003e [SimpleDeadFunctionEliminationSpec.hs]   |\n[dead variable elimination][170]          \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [SimpleDeadVariableElimination.hs]  \u003cbr\u003e\u003cbr\u003e _test:_ \u003cbr\u003e [SimpleDeadVariableEliminationSpec.hs]   |\n[dead parameter elimination][171]         \u003cbr\u003e\u003cbr\u003e _source code:_ \u003cbr\u003e [SimpleDeadParameterElimination.hs] \u003cbr\u003e\u003cbr\u003e _test:_ \u003cbr\u003e [SimpleDeadParameterEliminationSpec.hs]  |\n\n[129]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=129\n[134]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=134\n[141]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=141\n[142]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=142\n[143]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=143\n[144]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=144\n[148]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=148\n[149]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=149\n[151]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=151\n[153]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=153\n[159]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=159\n[160]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=160\n[164]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=164\n[169]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=169\n[170]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=170\n[171]: http://nbviewer.jupyter.org/github/grin-compiler/grin/blob/master/papers/boquist.pdf#page=171\n\n[ArityRaising.hs]:              https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Optimising/ArityRaising.hs\n[ConstantPropagation.hs]:       https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Optimising/ConstantPropagation.hs\n[CopyPropagation.hs]:           https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Optimising/CopyPropagation.hs\n[CaseCopyPropagation.hs]:       https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Optimising/CaseCopyPropagation.hs\n[CaseHoisting.hs]:              https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Optimising/CaseHoisting.hs\n[CSE.hs]:                       https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Optimising/CSE.hs\n[EvaluatedCaseElimination.hs]:  https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Optimising/EvaluatedCaseElimination.hs\n[Inlining.hs]:                  https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Optimising/Inlining.hs\n[SparseCaseOptimisation.hs]:    https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Optimising/SparseCaseOptimisation.hs\n[TrivialCaseElimination.hs]:    https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Optimising/TrivialCaseElimination.hs\n[UpdateElimination.hs]:         https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Optimising/UpdateElimination.hs\n[GeneralizedUnboxing.hs]:       https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Optimising/GeneralizedUnboxing.hs\n[SimpleDeadFunctionElimination.hs]:   https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Optimising/SimpleDeadFunctionElimination.hs\n[SimpleDeadVariableElimination.hs]:   https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Optimising/SimpleDeadVariableElimination.hs\n[SimpleDeadParameterElimination.hs]:  https://github.com/grin-compiler/grin/blob/master/grin/src/Transformations/Optimising/SimpleDeadParameterElimination.hs\n\n[ArityRaisingSpec.hs]:              https://github.com/grin-compiler/grin/blob/master/grin/test/Transformations/Optimising/ArityRaisingSpec.hs\n[ConstantPropagationSpec.hs]:       https://github.com/grin-compiler/grin/blob/master/grin/test/Transformations/Optimising/ConstantPropagationSpec.hs\n[CopyPropagationSpec.hs]:           https://github.com/grin-compiler/grin/blob/master/grin/test/Transformations/Optimising/CopyPropagationSpec.hs\n[CaseCopyPropagationSpec.hs]:       https://github.com/grin-compiler/grin/blob/master/grin/test/Transformations/Optimising/CaseCopyPropagationSpec.hs\n[CaseHoistingSpec.hs]:              https://github.com/grin-compiler/grin/blob/master/grin/test/Transformations/Optimising/CaseHoistingSpec.hs\n[CSESpec.hs]:                       https://github.com/grin-compiler/grin/blob/master/grin/test/Transformations/Optimising/CSESpec.hs\n[EvaluatedCaseEliminationSpec.hs]:  https://github.com/grin-compiler/grin/blob/master/grin/test/Transformations/Optimising/EvaluatedCaseEliminationSpec.hs\n[InliningSpec.hs]:                  https://github.com/grin-compiler/grin/blob/master/grin/test/Transformations/Optimising/InliningSpec.hs\n[SparseCaseOptimisationSpec.hs]:    https://github.com/grin-compiler/grin/blob/master/grin/test/Transformations/Optimising/SparseCaseOptimisationSpec.hs\n[TrivialCaseEliminationSpec.hs]:    https://github.com/grin-compiler/grin/blob/master/grin/test/Transformations/Optimising/TrivialCaseEliminationSpec.hs\n[UpdateEliminationSpec.hs]:         https://github.com/grin-compiler/grin/blob/master/grin/test/Transformations/Optimising/UpdateEliminationSpec.hs\n[GeneralizedUnboxingSpec.hs]:       https://github.com/grin-compiler/grin/blob/master/grin/test/Transformations/Optimising/GeneralizedUnboxingSpec.hs\n[SimpleDeadFunctionEliminationSpec.hs]:   https://github.com/grin-compiler/grin/blob/master/grin/test/Transformations/Optimising/SimpleDeadFunctionEliminationSpec.hs\n[SimpleDeadVariableEliminationSpec.hs]:   https://github.com/grin-compiler/grin/blob/master/grin/test/Transformations/Optimising/SimpleDeadVariableEliminationSpec.hs\n[SimpleDeadParameterEliminationSpec.hs]:  https://github.com/grin-compiler/grin/blob/master/grin/test/Transformations/Optimising/SimpleDeadParameterEliminationSpec.hs\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrin-compiler%2Fgrin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrin-compiler%2Fgrin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrin-compiler%2Fgrin/lists"}