Name: validated-literals Version: 0.3.0 X-Revision: 2 Homepage: https://github.com/merijn/validated-literals Bug-Reports: https://github.com/merijn/validated-literals/issues Author: Merijn Verstraaten Maintainer: Merijn Verstraaten Copyright: Copyright © 2015-2020 Merijn Verstraaten License: BSD3 License-File: LICENSE Category: Data Cabal-Version: >= 1.10 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.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.15 , 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: DeriveGeneric, DeriveLift, FlexibleInstances, MultiParamTypeClasses, TemplateHaskell Hs-Source-Dirs: examples Build-Depends: base , bytestring >= 0.10 && < 0.12 , deepseq == 1.4.* , tasty >= 0.11 && < 1.4 , tasty-hunit >= 0.9 && < 0.11 , tasty-travis >= 0.2 && < 0.3 , template-haskell , validated-literals Source-Repository head Type: git Location: git+ssh://github.com:merijn/validated-literals