Cabal-Version: 2.0
Name: validated-literals
Version: 0.3.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-2021 Merijn Verstraaten
License: BSD3
License-File: LICENSE
Category: Data
Build-Type: Simple
Tested-With: GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5,
GHC == 8.8.4, GHC == 8.10.7, GHC == 9.0.1, GHC == 9.2.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
Other-Extensions: DefaultSignatures, FlexibleContexts,
MultiParamTypeClasses, ScopedTypeVariables,
TemplateHaskell
Exposed-Modules: ValidLiterals
Build-Depends: base >= 4.9 && < 4.17
, template-haskell >= 2.11 && < 2.19
, th-compat ^>= 0.1.3
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: CPP, DeriveGeneric, DeriveLift, FlexibleInstances,
MultiParamTypeClasses, TemplateHaskell
Hs-Source-Dirs: examples
Build-Depends: base
, bytestring >= 0.10 && < 0.12
, deepseq == 1.4.*
, tasty >= 0.11 && < 1.5
, tasty-hunit >= 0.9 && < 0.11
, tasty-travis >= 0.2 && < 0.3
, template-haskell
, th-compat
, validated-literals
Source-Repository head
Type: git
Location: git+ssh://github.com:merijn/validated-literals