{-# LANGUAGE FlexibleContexts  #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
-- | Hooks module to define the main behavior of the program.
module Imm.Hooks where

-- {{{ Imports
import           Imm.Feed
import           Imm.Logger
import           Imm.Prelude
import           Imm.Pretty
-- }}}

-- * Types

-- | Monad capable of acting on specific events.
class Monad m => MonadImm m where
  -- | Action triggered for each unread feed element
  processNewElement :: Feed -> FeedElement -> m ()

-- * Primitives

onNewElement :: (MonadImm m, MonadLog m) => Feed -> FeedElement -> m ()
onNewElement feed element = do
  logDebug $ "Unread element:" <+> pretty (getTitle element)
  processNewElement feed element