Name: validated-literals
Version: 0.2.0
Homepage: https://github.com/merijn/validated-literals
Bug-Reports: https://github.com/merijn/validated-literals/issues
Author: Merijn Verstraaten
Maintainer: Merijn Verstraaten <merijn@inconsistent.nl>
Copyright: Copyright © 2015 Merijn Verstraaten
License: BSD3
License-File: LICENSE
Category: Data
Cabal-Version: >= 1.10
Build-Type: Simple
Tested-With: GHC == 7.8.3
Synopsis: Compile-time checking for partial smart-constructors
Description:
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.
Extra-Source-Files:
examples/ByteString.hs
examples/Even.hs
examples/Examples.hs
Library
Default-Language: Haskell2010
GHC-Options: -Wall
Default-Extensions:
Other-Extensions: DefaultSignatures, FlexibleContexts,
MultiParamTypeClasses, TemplateHaskell
Exposed-Modules: ValidLiterals
ValidLiterals.Class
Other-Modules:
Build-Depends: base >=4.8 && <4.9
, template-haskell
, bytestring >=0.10 && <0.11
Source-Repository head
Type: mercurial
Location: https://bitbucket.org/merijnv/validated-literals
Source-Repository head
Type: git
Location: git+ssh://github.com:merijn/validated-literals