prop_roundTripEntriesToCSV :: AppContext -> Property
prop_roundTripEntriesToCSV ctx = Monadic.monadicIO $ do
  tds  <- Monadic.pick (QuickCheck.listOf1 (QuickCheck.suchThat arbitrary isNotEmpty))
  x    <- Monadic.pick (QuickCheck.suchThat arbitrary (> 0))
  let file = createFilePath ctx x
  es   <- Monadic.run (SQLite.run (mapM createEntryFromTestData tds) ctx)
  _    <- Monadic.run (Evaluator.exportCSV file es)
  ies  <- Monadic.run (SQLite.run (Evaluator.importCSV file) ctx)
  bs   <- Monadic.run (Monad.zipWithM entriesHaveSameContent es ies)
  Monadic.assert (and bs)
prop_roundTripEntriesToCSV :: AppContext -> Property
prop_roundTripEntriesToCSV ctx = Monadic.monadicIO $ do
  tds  <- Monadic.pick (QuickCheck.listOf1 (QuickCheck.suchThat arbitrary isNotEmpty))
  x    <- Monadic.pick (QuickCheck.suchThat arbitrary (> 0))
  let file = createFilePath ctx x
  es   <- Monadic.run (SQLite.run (mapM createEntryFromTestData tds) ctx)
  _    <- Monadic.run (Evaluator.exportCSV file es)
  ies  <- Monadic.run (SQLite.run (Evaluator.importCSV file) ctx)
  bs   <- Monadic.run (Monad.zipWithM entriesHaveSameContent es ies)
  Monadic.assert (and bs)
prop_roundTripEntriesToCSV ctx = Monadic.monadicIO $ do
  tds  <- Monadic.pick (QuickCheck.listOf1 (QuickCheck.suchThat arbitrary isNotEmpty))
  x    <- Monadic.pick (QuickCheck.suchThat arbitrary (> 0))
  let file = createFilePath ctx x
  es   <- Monadic.run (SQLite.run (mapM createEntryFromTestData tds) ctx)
  _    <- Monadic.run (Evaluator.exportCSV file es)
  ies  <- Monadic.run (SQLite.run (Evaluator.importCSV file) ctx)
  bs   <- Monadic.run (Monad.zipWithM entriesHaveSameContent es ies)
  Monadic.assert (and bs)