GHC Plugin for non-empty lists.
GHC Plugin for compile-time transformation of list literals to NonEmpty
lists.
{-#
OPTIONS_GHC
-fplugin=GhcPluginNonEmpty #-}
import
Data.List.NonEmpty (NonEmpty)
portsToListen :: NonEmpty Int
portsToListen = [8000, 8080, 8081]
See README.md for more details.
ghc-plugin-non-empty
GHC Compiler Plugin for automatically converting list literals to the NonEmpty
type from the Data.List.NonEmpty
module in base
.
This plugin checks statically defined list literals and transforms them into NonEmpty
lists during compile time. In other words, it provides compile-time guarantees for non-emptiness checks and allows the following expression to type-check:
portsToListen :: NonEmpty Int
portsToListen = [8000, 8080, 8081]
Compare to usage without the plugin:
portsToListen :: NonEmpty Int
portsToListen = 8000 :| [8080, 8081]
ℹ️ DISCLAIMER:
ghc-plugin-non-empty
is developed and maintained in free time by volunteers. The development may continue for decades or may stop tomorrow. You can use GitHub Sponsorship to support the development of this project.
How to use?
ghc-plugin-non-empty
is compatible with the following GHC versions — supported versions
In order to start using ghc-plugin-non-empty
in your project, you'll need to set it up with these steps:
Add the dependency on
ghc-plugin-non-empty
in your project's.cabal
file. For this, you should modify thebuild-depends
section according to the below section:build-depends: , base ^>= LATEST_SUPPORTED_BASE , ghc-plugin-non-empty ^>= LATEST_VERSION
To use this package, refer to the below example.
{-# OPTIONS_GHC -fplugin=GhcPluginNonEmpty #-} module Main (main) where import Data.List.NonEmpty (NonEmpty) exampleList :: NonEmpty Int exampleList = [100, 5, 74] main :: IO () main = print exampleList
For contributors
Check CONTRIBUTING.md for contributing guidelines.
To build the project and run the tests, use cabal
:
cabal build all
cabal test --enable-tests --test-show-details=direct