-- | -- -- Copyright : (C) Keera Studios Ltd, 2013 -- License : BSD3 -- Maintainer : support@keera.co.uk module Hails.MVC.Model.ProtectedModel.NamedModel where import Hails.MVC.Model.ProtectedModel import Hails.MVC.Model.ReactiveModel import Language.Haskell.TH.Syntax import Language.Haskell.TH.DeriveField class NamedBasicModel a where getBMName :: a -> String class NamedProtectedModel a where getName :: a -> IO String -- class NamedReactiveModel a where -- getRMName :: a -> String -- -- instance NamedBasicModel a => NamedReactiveModel (ReactiveModel a) where -- getRMName = getBMName . basicModel instance (Event b, NamedBasicModel a) => NamedProtectedModel (ProtectedModel a b) where getName = (`onReactiveModel` getRMName) where getRMName = getBMName . basicModel deriveNamed :: Name -> Q [Dec] deriveNamed = deriveField "NamedBasicModel" "getBMName" "name"