| Safe Haskell | Safe-Inferred | 
|---|---|
| Language | Haskell2010 | 
Prairie.TH
Description
Helpers for generating instances of the Record type class.
Since: 0.0.1.0
Documentation
mkRecord :: Name -> DecsQ Source #
Create an instance of the Record type class.
data User
  = User
  { name :: String
  , age :: Int
  }
mkRecord ''User
====>
instance Record User where
  data Field User a where
    UserName :: String
    UserAge :: Int
  recordFieldLens fl =
    case fl of
      UserName -> lens name (u n -> u { name = n)
      UserAge -> lens age (u n -> u { age = n)
instance SymbolToField "age" User Int where symbolToField = UserName
instance SymbolToField "name" User String where symbolToField = UserAge
If the fields are prefixed with the type's name, this function figures it out and won't duplicate the field.
data User
  = User
  { userName :: String
  , userAge :: Int
  }
mkRecord ''User
====>
instance Record User where
  data Field User a where
    UserName :: String
    UserAge :: Int
  recordFieldLens fl =
    case fl of
      UserName -> lens name (u n -> u { name = n)
      UserAge -> lens age (u n -> u { age = n)
instance SymbolToField "name" User Int where symbolToField = UserName
instance SymbolToField "age" User String where symbolToField = UserAge
Since: 0.0.1.0
upperFirst :: String -> String Source #
lowerFirst :: String -> String Source #
compatConP :: Name -> Pat Source #