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.


Versions0.1.0, 0.2.0, 0.2.0
Dependenciesbase (==4.8.*), bytestring (==0.10.*), template-haskell [details]
CopyrightCopyright © 2015 Merijn Verstraaten
AuthorMerijn Verstraaten
MaintainerMerijn Verstraaten <>
Home page
Bug tracker
Source repositoryhead: hg clone
head: git clone git+ssh://
UploadedFri Sep 11 15:26:11 UTC 2015 by MerijnVerstraaten




Maintainers' corner

For package maintainers and hackage trustees