module Control.Monad.Apiary.Filter.Internal.Capture where
import Control.Applicative
import Control.Monad
import Control.Monad.Apiary.Action.Internal
import Control.Monad.Apiary.Internal
import Data.Apiary.Param
import Data.Apiary.SList
import Data.Apiary.Document
import qualified Data.Text as T
import Text.Blaze.Html
path :: Monad n => T.Text -> ApiaryT c n m a -> ApiaryT c n m a
path p = focus' (DocPath p) Nothing (Exact p:) return
endPath :: (Functor n, Monad n) => ApiaryT c n m a -> ApiaryT c n m a
endPath = focus' id Nothing (EndPath:) return
fetch :: (Path a, Functor n, Monad n) => proxy a -> Maybe Html -> ApiaryT (Snoc as a) n m b -> ApiaryT as n m b
fetch p h = focus' (DocFetch (pathRep p) h) Nothing (FetchPath:) $ \l -> liftM actionFetches getState >>= \case
[] -> mzero
f:fs -> case readPathAs p f of
Just r -> sSnoc l r <$ modifyState (\s -> s {actionFetches = fs})
Nothing -> mzero