Description
Extended Converter Library for groundhog embedded types.
Description
Groundhog allows a programmer to represent a haskell datatype by an equivalent type that is more suited for Database work. groundhog-converters provides a selection of common converters that have proved useful.
README.md
groundhog-converters
Groundhog allows a programmer to represent a haskell datatype by an equivalent type that is more suited for Database work. groundhog-converters provides a selection of common converters that have proved useful.
Usage
-- | Sample DataType 'Group' proviides a Map between an Integer and a 'Person'
-- However, the person is embedded in the Datatype relative to the SQL database
data Group = Group {
_people :: Map Integer Person
}
deriving (Eq)
-- | A wrapped representation of a Person
data Person = Person { _unPerson :: String}
deriving (Eq)
instance Arbitrary Person where
arbitrary = Person <$> arbitrary
-- | An Isomorphism between the representation that is pleasent to use in haskell
-- and the one that makes sense to store i.e. 'PersistEntity'
personMapConverter :: Converter (Map Integer Person) [(Int64,String)]
personMapConverter = mapConverter `composeConverter` fmapConverter (bicomposeConverter integerConverter personConverter)
-- | This converter is embedded in 'personMapConverter'
personConverter :: Converter Person String
personConverter = (_unPerson,Person)
-- | A declaration for group.
mkPersist defaultCodegenConfig [groundhog|
- entity: Group
constructors:
- name: Group
fields:
- name: _people
dbName: people
exprName: MappedIdToPerson
converter: personMapConverter
- primitive: Person
converter: personConverter
|]
How to run tests
cabal configure --enable-tests && cabal build && cabal test