module Raehik.Compat.FlatParse.Basic.WithLength where
import FlatParse.Basic.Parser
import GHC.Exts
parseWithLength :: ParserT st e a -> ParserT st e (a, Int)
parseWithLength :: forall (st :: ZeroBitType) e a.
ParserT st e a -> ParserT st e (a, Int)
parseWithLength (ParserT ForeignPtrContents -> Addr# -> Addr# -> st -> Res# st e a
f) = (ForeignPtrContents -> Addr# -> Addr# -> st -> Res# st e (a, Int))
-> ParserT st e (a, Int)
forall (st :: ZeroBitType) e a.
(ForeignPtrContents -> Addr# -> Addr# -> st -> Res# st e a)
-> ParserT st e a
ParserT ((ForeignPtrContents -> Addr# -> Addr# -> st -> Res# st e (a, Int))
-> ParserT st e (a, Int))
-> (ForeignPtrContents
-> Addr# -> Addr# -> st -> Res# st e (a, Int))
-> ParserT st e (a, Int)
forall a b. (a -> b) -> a -> b
$ \ForeignPtrContents
fp Addr#
eob Addr#
s st
st -> do
case ForeignPtrContents -> Addr# -> Addr# -> st -> Res# st e a
f ForeignPtrContents
fp Addr#
eob Addr#
s st
st of
Fail# st
st' -> st -> Res# st e (a, Int)
forall (st :: ZeroBitType) e a. st -> Res# st e a
Fail# st
st'
Err# st
st' e
e -> st -> e -> Res# st e (a, Int)
forall (st :: ZeroBitType) e a. st -> e -> Res# st e a
Err# st
st' e
e
OK# st
st' a
a Addr#
s' -> st -> (a, Int) -> Addr# -> Res# st e (a, Int)
forall (st :: ZeroBitType) a e. st -> a -> Addr# -> Res# st e a
OK# st
st' (a
a, Int# -> Int
I# (Addr#
s' Addr# -> Addr# -> Int#
`minusAddr#` Addr#
s)) Addr#
s'
{-# inline parseWithLength #-}