{-# LANGUAGE TemplateHaskell, ScopedTypeVariables #-}

-- |
-- This package provides a function to generate a choice operator
-- in lifted IO monad by specifying exceptions to be caught.

module Control.Exception.IOChoice.Lifted.TH (newIOChoice) where

import Control.Exception.Lifted
import Language.Haskell.TH

import Control.Exception.IOChoice.THUtil

-- |
-- A function to generate a choice operator in lifted IO monad.
-- 'IOException' is automatically added to specified exceptions.
-- So, 'Control.Exception.IOChoice.Lifted.goNext' can be used with
-- the new operator.
--
-- > {-# LANGUAGE TemplateHaskell #-}
-- > import Control.Exception
-- > import Control.Exception.IOChoice.Lifted.TH
-- >
-- > (||>>) :: MonadBaseControl IO m => m a -> m a -> m a
-- > (||>>) = $(newIOChoice [''ErrorCall, ''ArithException])

newIOChoice :: [Name] -> ExpQ
newIOChoice =  newChoice [| catches |] [| Handler |]