Name: validated-literals
Version: 0.2.0.1
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-2018 Merijn Verstraaten
License: BSD3
License-File: LICENSE
Category: Data
Cabal-Version: >= 1.10
Build-Type: Simple
Tested-With: GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.3,
GHC == 8.6.1
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: README.md, CHANGELOG.md
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.12
, template-haskell
Test-Suite examples
Default-Language: Haskell2010
Type: exitcode-stdio-1.0
Main-Is: Examples.hs
Other-Modules: ByteString
Even
GHC-Options: -Wall -fno-warn-unused-do-bind
Other-Extensions: TemplateHaskell
Hs-Source-Dirs: examples
Build-Depends: base
, bytestring == 0.10.*
, deepseq == 1.4.*
, tasty >= 0.11 && < 1.1
, tasty-hunit == 0.9.*
, tasty-travis >= 0.2 && < 0.3
, template-haskell
, validated-literals
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