-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Specification of generators and parsers -- -- This is a generalisation of the idea behind the XML pickle/unpickle -- functions of HXT. It allows to simulatanously specify functions for -- parsing and generating. @package bidispec @version 0.1 module Data.BidiSpec data Spec err src tgt a type SpecGen tgt a = tgt -> a -> tgt newtype SpecParser s e a SpecParser :: ReaderT s (Either e) a -> SpecParser s e a unSpecParser :: SpecParser s e a -> ReaderT s (Either e) a mkSpec :: SpecParser i e a -> SpecGen o a -> Spec e i o a parseBySpec :: (MonadError e m) => Spec e i o a -> i -> m a genBySpec :: (Monad m) => Spec e i o a -> o -> a -> m o runSpecParser :: SpecParser s e a -> s -> Either e a rsGen :: Spec err src tgt a -> SpecGen tgt a rsParse :: Spec err src tgt a -> SpecParser src err a spGet :: (Error e) => SpecParser s e s spGets :: (Error e) => (s -> a) -> SpecParser s e a spCheck :: (Error e) => (a -> Bool) -> (a -> e) -> a -> SpecParser s e () spFromMaybe :: (Error e) => e -> Maybe a -> SpecParser s e a spFromEither :: (Error e) => Either e a -> SpecParser s e a rsPair :: (Error e) => Spec e i o a -> Spec e i o b -> Spec e i o (a, b) rsTriple :: (Error e) => Spec e i o a -> Spec e i o b -> Spec e i o c -> Spec e i o (a, b, c) rsQuadruple :: (Error e) => Spec e i o a -> Spec e i o b -> Spec e i o c -> Spec e i o d -> Spec e i o (a, b, c, d) rsWrap :: (Error e) => (a -> b, b -> a) -> Spec e i o a -> Spec e i o b rsWrapMaybe :: (Error e) => String -> (a -> Maybe b, b -> a) -> Spec e i o a -> Spec e i o b rsWrapEither :: (Error e) => (a -> Either e b, b -> a) -> Spec e i o a -> Spec e i o b rsWrapEither' :: (Show l, Error e) => (a -> Either l b, b -> a) -> Spec e i o a -> Spec e i o b rsCondSeq :: (Error e) => Spec e i o b -> (b -> a) -> Spec e i o a -> (a -> Spec e i o b) -> Spec e i o b rsChoice :: (Error e) => Spec e i o b -> Spec e i o a -> (a -> Spec e i o b) -> Spec e i o b rsAlt :: (Error e) => (a -> Int) -> [Spec e i o a] -> Spec e i o a rsTagSwitch :: (Error e, Eq t) => (a -> t) -> [SpecCase e i o a] -> Spec e i o a rsSwitch :: (Error e, Show a) => [SpecCase e i o a] -> Spec e i o a rsCase :: (Error e) => (a -> b, b -> a) -> Spec e i o a -> SpecCase e i o b rsCaseConst :: (Error e) => a -> (Spec e i o b -> Spec e i o b) -> SpecCase e i o a rsGetSet :: (Error e) => (i -> a) -> (o -> a -> o) -> Spec e i o a rsCheckSet :: (Error e) => SpecParser i e () -> (o -> o) -> Spec e i o a -> Spec e i o a rsLift :: (Error e) => a -> Spec e i o a rsUnit :: (Error e) => Spec e i o () rsZero :: (Error e) => Spec e i o a rsWith :: (Spec e i o a -> Spec e i o b) -> Spec e i o a -> Spec e i o b instance Monad (SpecParser s e) instance (Error e) => MonadPlus (SpecParser s e) instance (Error e) => MonadReader s (SpecParser s e) instance (Error e) => MonadError e (SpecParser s e)