@hackage groundhog-converters0.1.0
Extended Converter Library for groundhog embedded types
Categories
License
BSD-3-Clause
Maintainer
Scott Murphy <scottmurphy09@gmail.com>
Links
Versions
- 0.1.0 Fri, 18 Mar 2016
Installation
Dependencies (5)
- aeson
- base >=4 && <5
- bimap
- bytestring
- containers Show all…
Dependents (1)
@hackage/tasty-groundhog-converters
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