{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE FlexibleContexts #-}

module Web.Apiary.PureScript
    ( I.PureScriptConfig(..)
    , HasPureScript
    , withPureScript
    , pureScript
    ) where

import Web.Apiary
import qualified Web.Apiary.PureScript.Internal as I
import Data.Reflection

type HasPureScript = Given I.PureScript

withPureScript :: MonadIO m => I.PureScriptConfig
               -> (HasPureScript => m a) -> m a
withPureScript conf m = I.withPureScript conf $ \p -> give p m

pureScript :: (MonadIO m, HasPureScript) => FilePath -> ActionT m ()
pureScript = I.pureScript given