{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Factis.Haskoon.WebIdT (WebTrans(..), WebIdT(..)) where

----------------------------------------
-- STDLIB
----------------------------------------
import Control.Monad.Trans (MonadTrans(..), MonadIO(..))

----------------------------------------
-- LOCAL
----------------------------------------
import Factis.Haskoon.WebTrans (WebTrans(..))

newtype WebIdT m a = WebIdT { runWebIdT :: m a } deriving (Monad)

instance MonadTrans WebIdT where
    lift = WebIdT

instance MonadIO m => MonadIO (WebIdT m) where
    liftIO = WebIdT . liftIO

instance WebTrans WebIdT where
    liftWeb = WebIdT
    liftWebFun f cont = WebIdT (f (runWebIdT cont))