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 maintainer: Adam Vogt 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