ivory-artifact-0.1.0.3: src/Ivory/Artifact/Transformer.hs
module Ivory.Artifact.Transformer
( Transformer()
, emptyTransformer
, transform
, transformErr
, runTransformer
) where
newtype Transformer a =
Transformer
{ unTransformer :: a -> Either String a
}
emptyTransformer :: Transformer a
emptyTransformer = Transformer Right
transform :: (a -> a) -> Transformer a -> Transformer a
transform f (Transformer t) = Transformer $ \a -> do
a' <- t a
return (f a')
transformErr :: (a -> Either String a) -> Transformer a -> Transformer a
transformErr f (Transformer t) = Transformer $ \a -> do
a' <- t a
f a'
runTransformer :: Transformer a -> a -> Either String a
runTransformer = unTransformer