The validated-literals package
To disallow invalid input it is common to define (new)types with hidden data constructors. Forcing the user to go through a smart-constructor that enforces invariants and returns Maybe ResultType, preventing the construction of data with invalid values.
However, it is __also__ common to want to include literal values of such types in source text. Things of textual literals for HTML, HTTP, etc. In such cases smart-constructors force us to handle potential conversion failures at runtime, or abusing functions like fromJust to break away all the safety smart-constructors provide. All this despite the fact that we can statically know at compile time that the conversion will always succeed or always fails.
This package provides a typeclasses for using TH to validate the correctness of provided literals at compile. This lets you define, e.g., newtype Even = Even Integer and write:
x :: Even x = $$(valid 38)
This will check, at compile time, that the provided Integer is, in fact, even and unwrap it from Maybe, avoiding the runtime check.
|Versions||0.1.0, 0.2.0 (info)|
|Dependencies||base (==4.8.*), bytestring (==0.10.*), template-haskell [details]|
|Copyright||Copyright © 2015 Merijn Verstraaten|
|Maintainer||Merijn Verstraaten <email@example.com>|
|Source repository||head: hg clone https://bitbucket.org/merijnv/validated-literals
head: git clone git+ssh://github.com:merijn/validated-literals
|Uploaded||Fri Sep 11 15:24:58 UTC 2015 by MerijnVerstraaten|
|Downloads||191 total (4 in the last 30 days)|
|Status||Docs uploaded by user
Build status unknown [no reports yet]
For package maintainers and hackage trustees