packages feed

HListPP-0.2.2: HListPP.cabal

name:                HListPP
version:             0.2.2
synopsis:            A preprocessor for HList labelable labels
description:         A preprocessor that replaces @`longDescriptiveName@ with
                    .
                     > hLens' (Label :: Label "longDescriptiveName")
                    .
                     Use with ghc flags @-F -pgmF HListPP@. A file using HListPP
                     could start with something like
                    .
                     > ❴-# OPTIONS_GHC -F -pgmF HListPP #-❵ -- change braces to ascii (haddock doesn't allow literal comments in files)
                     > ❴-# LANGUAGE DataKinds #-❵
                     > import Data.HList.CommonMain
                     > import Control.Lens
                    .
                     Then the labels can then be used in expressions with types
                     like:
                    .
                     > `x :: Lens (Record S) (Record T) a b
                     > `x :: Prism (Variant S) (Variant T) a b
                     > `a .==. "x" .*.
                     >    `b .==. "y" .*. emptyRecord :: Record [ Tagged "a" String, Tagged "b" String ]
                    .
                     where @S@ is a type-level list containing a @Tagged "x" a@
                     and @T@ is a type-level list containing a @Tagged "x" b@.
                    .
                     Note that @`labels@ is expanded to something that
                     takes up about 26 more columns. To avoid issues with
                     layout, put a newline after keywords that introduce
                     layout, at least if there are @`labels@ in the same row.
                     In other words:
                    .
                     > `character.`position.`x %= \ x -> let
                     >      msg = "a really long message about x>0"
                     >      pos = x - 5
                     >    in if pos < 0
                     >          then error msg
                     >          else pos
                    .
                     Instead of
                    .
                     > `character.`position.`x %= \ x -> let msg = "a really long message about x>0"
                     >                                       pos = x - 5
                     >                            in if pos < 0
                     >                                then error msg
                     >                                else pos

homepage:            http://github.com/aavogt/HListPP
license:             BSD3
license-file:        LICENSE
author:              Adam Vogt <vogt.adam@gmail.com>
maintainer:          Adam Vogt <vogt.adam@gmail.com>
category:            Development
build-type:          Simple
cabal-version:       >=1.10
extra-source-files:  ChangeLog

source-repository head
  type:     git
  location: http://github.com/aavogt/HListPP

executable HListPP
  main-is:             HListPP.hs
  other-extensions:    QuasiQuotes, ViewPatterns
  build-depends:       base >=4.9 && <5,
                       regex-applicative >=0.3 && <0.4
  default-language:    Haskell2010