{-
pandoc-crossref is a pandoc filter for numbering figures,
equations, tables and cross-references to them.
Copyright (C) 2015  Nikolay Yakimov <root@livid.pp.ru>

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-}

{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Text.Pandoc.CrossRef.References.Monad where

import Control.Monad.State
import Control.Monad.Reader
import Text.Pandoc.CrossRef.References.Types
import Text.Pandoc.CrossRef.Util.Options

--state monad
newtype WS a = WS { forall a. WS a -> ReaderT Options (State References) a
runWS :: ReaderT Options (State References) a }
  deriving ((forall a b. (a -> b) -> WS a -> WS b)
-> (forall a b. a -> WS b -> WS a) -> Functor WS
forall a b. a -> WS b -> WS a
forall a b. (a -> b) -> WS a -> WS b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> WS a -> WS b
fmap :: forall a b. (a -> b) -> WS a -> WS b
$c<$ :: forall a b. a -> WS b -> WS a
<$ :: forall a b. a -> WS b -> WS a
Functor, Functor WS
Functor WS =>
(forall a. a -> WS a)
-> (forall a b. WS (a -> b) -> WS a -> WS b)
-> (forall a b c. (a -> b -> c) -> WS a -> WS b -> WS c)
-> (forall a b. WS a -> WS b -> WS b)
-> (forall a b. WS a -> WS b -> WS a)
-> Applicative WS
forall a. a -> WS a
forall a b. WS a -> WS b -> WS a
forall a b. WS a -> WS b -> WS b
forall a b. WS (a -> b) -> WS a -> WS b
forall a b c. (a -> b -> c) -> WS a -> WS b -> WS c
forall (f :: * -> *).
Functor f =>
(forall a. a -> f a)
-> (forall a b. f (a -> b) -> f a -> f b)
-> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
-> (forall a b. f a -> f b -> f b)
-> (forall a b. f a -> f b -> f a)
-> Applicative f
$cpure :: forall a. a -> WS a
pure :: forall a. a -> WS a
$c<*> :: forall a b. WS (a -> b) -> WS a -> WS b
<*> :: forall a b. WS (a -> b) -> WS a -> WS b
$cliftA2 :: forall a b c. (a -> b -> c) -> WS a -> WS b -> WS c
liftA2 :: forall a b c. (a -> b -> c) -> WS a -> WS b -> WS c
$c*> :: forall a b. WS a -> WS b -> WS b
*> :: forall a b. WS a -> WS b -> WS b
$c<* :: forall a b. WS a -> WS b -> WS a
<* :: forall a b. WS a -> WS b -> WS a
Applicative, Applicative WS
Applicative WS =>
(forall a b. WS a -> (a -> WS b) -> WS b)
-> (forall a b. WS a -> WS b -> WS b)
-> (forall a. a -> WS a)
-> Monad WS
forall a. a -> WS a
forall a b. WS a -> WS b -> WS b
forall a b. WS a -> (a -> WS b) -> WS b
forall (m :: * -> *).
Applicative m =>
(forall a b. m a -> (a -> m b) -> m b)
-> (forall a b. m a -> m b -> m b)
-> (forall a. a -> m a)
-> Monad m
$c>>= :: forall a b. WS a -> (a -> WS b) -> WS b
>>= :: forall a b. WS a -> (a -> WS b) -> WS b
$c>> :: forall a b. WS a -> WS b -> WS b
>> :: forall a b. WS a -> WS b -> WS b
$creturn :: forall a. a -> WS a
return :: forall a. a -> WS a
Monad, MonadReader Options, MonadState References)