Skip to content

clash-lang/ghc-typelits-natnormalise

This branch is 1 commit ahead of, 1 commit behind master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

5071d09 · Mar 4, 2025
Mar 4, 2025
Apr 24, 2015
Mar 4, 2025
Apr 29, 2024
Nov 11, 2022
Jul 31, 2023
Mar 4, 2025
Apr 4, 2019
Mar 4, 2025
Jan 4, 2018
May 23, 2021
Mar 16, 2015
Sep 18, 2022
Mar 4, 2025

Repository files navigation

ghc-typelits-natnormalise

Build Status Hackage Hackage Dependencies

A type checker plugin for GHC that can solve equalities and inequalities of types of kind Nat, where these types are either:

  • Type-level naturals
  • Type variables
  • Applications of the arithmetic expressions (+,-,*,^).

It solves these equalities by normalising them to sort-of SOP (Sum-of-Products) form, and then perform a simple syntactic equality.

For example, this solver can prove the equality between:

(x + 2)^(y + 2)

and

4*x*(2 + x)^y + 4*(2 + x)^y + (2 + x)^y*x^2

Because the latter is actually the SOP normal form of the former.

To use the plugin, add

{-# OPTIONS_GHC -fplugin GHC.TypeLits.Normalise #-}

To the header of your file.