keera-hails-mvc-solutions-gtk-0.7.0: src/Hails/MVC/Model/ProtectedModel/VersionedModel.hs
-- |
--
-- Copyright : (C) Keera Studios Ltd, 2013
-- License : BSD3
-- Maintainer : support@keera.co.uk
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
-- class VersionedReactiveModel a where
-- getRMVersion :: a -> String
--
-- instance VersionedBasicModel a => VersionedReactiveModel (ReactiveModel a) where
-- getRMVersion = getBMVersion . basicModel
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"