persistent-discover: Persistent module discover utilities

[ bsd3, library, program, web ] [ Propose Tags ]

This package provides an executable for discovering Persistent model definition files, as well as a library function to glob all persistent model files. Please see the README on GitHub at

[Skip to Readme]
Versions [RSS] [faq],,,,
Change log
Dependencies base (>=4.12 && <5), directory, dlist, file-embed, filepath, mtl, persistent (>=, persistent-discover, template-haskell (>= && <2.17) [details]
License BSD-3-Clause
Copyright Matt Parsons
Author Matt Parsons
Revised Revision 1 made by parsonsmatt at 2021-06-30T16:59:56Z
Category Web
Home page
Bug tracker
Source repo head: git clone
Uploaded by parsonsmatt at 2021-05-13T16:06:19Z
Distributions NixOS:, Stackage:
Executables persistent-discover
Downloads 241 total (10 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2021-05-13 [all 1 reports]


[Index] [Quick Jump]


Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

For package maintainers and hackage trustees


Readme for persistent-discover-

[back to package description]


build status

Supports automatic discovery of your persistent models.

As an executable

Let's say you've got a ton of persistent database models, all defined in a module hierarchy like this:


If you're using persistent to automatically generate migrations, you'll want to have all the [EntityDef] in scope from each module. You can do that by importing each module that defines models and calling $(discoverEntities), introduced in persistent-2.13.

But you may forget to import a module.

This utility imports all the modules defined in the current directory and sub-directories, and then it calls $(discoverEntities) for you.

To use it, place the following command in a file, located in the same directory that your Haskell modules are in:

{-# OPTIONS_GHC -F -pgmF persistent-discover #-}

Let's say we put that in src/Models/All.hs. This generates a module Models.All that exports a single item: allEntities, which is a [EntityDef] and can be used by migrateModels to properly perform migrations.

You'll need to add persistent-discover to the build-tool-depends on your cabal file for this to work.