dependent-literals-plugin: Dependent integer literals
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.
Flags
Manual Flags
Name | Description | Default |
---|---|---|
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
- dependent-literals-plugin-0.1.0.2.tar.gz [browse] (Cabal source package)
- Package description (revised from the package)
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
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] |