{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-unused-top-binds #-}
module Recursive (specsWith, recursiveMigrate, cleanup) where
import Init
share [mkPersist sqlSettings { mpsGeneric = True }, mkMigrate "recursiveMigrate"] [persistLowerCase|
SubType
object [MenuObject]
deriving Show Eq
MenuObject
sub SubType Maybe
deriving Show Eq
|]
cleanup
:: (PersistStoreWrite (BaseBackend backend), PersistQueryWrite backend)
=> ReaderT backend IO ()
cleanup = do
deleteWhere ([] :: [Filter (MenuObjectGeneric backend)])
deleteWhere ([] :: [Filter (SubTypeGeneric backend)])
specsWith
::
( PersistStoreWrite backend
, PersistStoreWrite (BaseBackend backend)
, MonadIO m
)
=> RunDb backend m
-> Spec
specsWith runDb = describe "recursive definitions" $ do
it "mutually recursive" $ runDb $ do
let m1 = MenuObject $ Just $ SubType []
let m2 = MenuObject $ Just $ SubType [m1]
let m3 = MenuObject $ Just $ SubType [m2]
k3 <- insert m3
m3' <- get k3
m3' @== Just m3