packages feed

keera-hails-mvc-solutions-gtk-0.7.0: src/Hails/MVC/Model/ProtectedModel/LoggedModel.hs

{-# LANGUAGE FlexibleInstances #-}
-- |
--
-- Copyright   : (C) Keera Studios Ltd, 2013
-- License     : BSD3
-- Maintainer  : support@keera.co.uk
module Hails.MVC.Model.ProtectedModel.LoggedModel where

import Hails.MVC.Model.ProtectedModel
import Hails.MVC.Model.ReactiveModel
import Control.Monad
import Language.Haskell.TH.Syntax
import Language.Haskell.TH.DeriveField
import System.Log.Logger

class LoggedBasicModel a where
  getBMLogName :: a -> String

class LoggedProtectedModel a where
  getLogName :: a -> IO String
  getLog     :: a -> IO Logger

instance (Event b, LoggedBasicModel a) => LoggedProtectedModel (ProtectedModel a b) where

  getLogName = (`onReactiveModel` getRMLogName)
    where getRMLogName = getBMLogName . basicModel

  getLog = getLogName >=> getLogger

deriveLogged :: Name -> Q [Dec]
deriveLogged =
  deriveField "LoggedBasicModel" "getBMLogName" "logName"