packages feed

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"