module Hails.MVC.Model.ProtectedModel.VersionedModel where
import Data.ExtraVersion
import Hails.MVC.Model.ProtectedModel
import Hails.MVC.Model.ReactiveModel
import Language.Haskell.TH.Syntax
import Language.Haskell.TH.DeriveField
class VersionedBasicModel a where
getBMVersion :: a -> Version
class VersionedProtectedModel a where
getVersion :: a -> IO Version
instance (Event b, VersionedBasicModel a) => VersionedProtectedModel (ProtectedModel a b) where
getVersion = (`onReactiveModel` getRMVersion)
where getRMVersion = getBMVersion . basicModel
deriveVersioned :: Name -> Q [Dec]
deriveVersioned =
deriveField "VersionedBasicModel" "getBMVersion" "version"