-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathvalidated-literals.cabal
88 lines (74 loc) · 3.27 KB
/
validated-literals.cabal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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 <[email protected]>
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.2, GHC == 9.2.7,
GHC == 9.4.4, GHC == 9.6.2
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.19
, template-haskell >= 2.11 && < 2.21
, 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.13
, 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