{-# LANGUAGE TypeOperators, FlexibleContexts #-}

-- | An instance of the 'MonadIO' class for a zipper:
--
--   @
--     instance ('MonadIO' (t2 m), 'MonadT' t1, 'MonadT' t2, 'Monad' m) => 'MonadIO' ((t1 ':>' t2) m)
--   @
--
--   Re-exports "Control.Monad.IO.Class" for convenience.
module Control.Monatron.Zipper.IO (module Control.Monad.IO.Class) where

import Control.Monatron.Monatron (MonadT(..), Monad)
import Control.Monatron.Zipper ((:>), zipper)
import Control.Monad.IO.Class

instance (MonadIO (t2 m), MonadT t1, MonadT t2, Monad m) => MonadIO ((t1 :> t2) m) where
  liftIO = zipper . lift . liftIO