packages feed

validated-literals-0.3.1: validated-literals.cabal

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