module DSV.AttoView
( attoByteStringView
) where
import DSV.AttoParser
import DSV.ByteString
import DSV.Validation
import DSV.ViewType
import qualified Data.Attoparsec.ByteString as A
attoByteStringView :: e -> AttoParser a -> View e ByteString a
attoByteStringView :: e -> AttoParser a -> View e ByteString a
attoByteStringView e
e AttoParser a
p =
(ByteString -> Validation e a) -> View e ByteString a
forall e a b. (a -> Validation e b) -> View e a b
View ((ByteString -> Validation e a) -> View e ByteString a)
-> (ByteString -> Validation e a) -> View e ByteString a
forall a b. (a -> b) -> a -> b
$ \ByteString
bs ->
case AttoParser a -> ByteString -> Either String a
forall a. Parser a -> ByteString -> Either String a
A.parseOnly (AttoParser a
p AttoParser a -> Parser ByteString () -> AttoParser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ByteString ()
forall t. Chunk t => Parser t ()
A.endOfInput) ByteString
bs of
Left String
_ -> e -> Validation e a
forall err a. err -> Validation err a
Failure e
e
Right a
x -> a -> Validation e a
forall err a. a -> Validation err a
Success a
x