packages feed

validated-literals-0.2.0: validated-literals.cabal

Name:                validated-literals
Version:             0.2.0

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 Merijn Verstraaten

License:             BSD3
License-File:        LICENSE

Category:            Data
Cabal-Version:       >= 1.10
Build-Type:          Simple
Tested-With:         GHC == 7.8.3

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:
    examples/ByteString.hs
    examples/Even.hs
    examples/Examples.hs

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.9
               ,        template-haskell
               ,        bytestring >=0.10 && <0.11

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