dependent-literals-plugin: Dependent integer literals

[ apache, constraints, library ] [ Propose Tags ] [ Report a vulnerability ]

This plugin implements pseudo-dependently-typed integer literals.

This means the value of an integer literal is available at the type level, and can be used for things like validation or type inference. For example, the SInt instance refines unknown type-level Nat variables to the particular literal value, and the Fin instance emits compile-time errors for out-of-range values. So, given mkVec :: SInt n -> (Fin n -> a) -> Vec n a, mkVec 4 will have type (Fin 4 -> a) -> Vec 4 a, and trying to type-check 4 :: Fin 4 will report a type error saying that 4 is out of range.

Patterns get a similar treatment, too, so case (x :: SInt n) of { 1 -> Just Refl; _ -> Nothing } :: Maybe (n :~: 1) can type-check: the act of matching against 1 proved that the type-level n was equal to 1, so Refl can type-check as n :~: 1.

To use this, enable the extensions DataKinds, FlexibleContexts, ViewPatterns, and TypeApplications, add dependent-literals and dependent-literals-plugin to your package's dependencies, and add -fplugin=DependentLiterals.Plugin to ghc-options to enable the plugin globally, or use OPTIONS_GHC pragmas to enable the plugin on a per-module basis. "Normal" integral types should still behave as normal, but literals and numeric patterns will become supported for SInt and Fin, and will provide additional information to the type checker automatically.

Modules

[Index] [Quick Jump]

Flags

Manual Flags

NameDescriptionDefault
error_message_tests

Enable tests that emit error messages for inspection.

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.0, 0.1.0.1, 0.1.0.2
Change log CHANGELOG.md
Dependencies base (>=4.12 && <4.17), ghc (>=8.6 && <9.3), syb (>=0.1 && <0.8) [details]
License Apache-2.0
Copyright 2019-2021 Google LLC
Author Andrew Pritchard <awpritchard@gmail.com>
Maintainer Andrew Pritchard <awpritchard@gmail.com>
Revised Revision 1 made by AndrewPritchard at 2022-08-14T15:58:09Z
Category Constraints
Home page https://github.com/google/hs-dependent-literals#readme
Bug tracker https://github.com/google/hs-dependent-literals/issues
Source repo head: git clone https://github.com/google/hs-dependent-literals(dependent-literals-plugin)
Uploaded by AndrewPritchard at 2021-11-05T08:49:55Z
Distributions
Downloads 456 total (7 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2021-11-05 [all 1 reports]