sparsec

simple Haskell parser combinator library
git clone git://git.rr3.xyz/sparsec
Log | Files | Refs | README | LICENSE

commit cfba4d81d6d85db40bad6c0e3d1885e4eb30faf2
parent 0007a356a0d8b384665d64ddfa6ce9f6a1e29dc6
Author: Robert Russell <robert@rr3.xyz>
Date:   Wed, 24 Dec 2025 18:10:25 -0800

Add boxed version of result for external API

Diffstat:
Msrc/Sparsec.hs | 15+++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/Sparsec.hs b/src/Sparsec.hs @@ -11,7 +11,12 @@ module Sparsec ( State (..), pattern State, -- Result - Result# (..), + Result#, + pattern Utf8Error#, + pattern Failure#, + pattern Error#, + pattern Success#, + Result (..), -- Parse monad ParseT (..), runParseT#, @@ -126,6 +131,8 @@ pattern Success# a s = Result# (# | | | (# a, s #) #) {-# COMPLETE Utf8Error#, Failure#, Error#, Success# #-} +data Result e a = ResultBox { resultUnbox :: Result# e a } + -- instance (Eq e, Eq a) => Eq (Result# e a) where -- Utf8Error# l0 == Utf8Error# l1 = l0 `locEq#` l1 -- Failure# == Failure# = True @@ -170,8 +177,8 @@ runParseT# :: ParseT e a -> State# -> Result# e a runParseT# (ParseT f) = f {-# INLINE runParseT# #-} -runParseT :: ParseT e a -> ByteString -> Loc -> Result# e a -runParseT p i l = p `runParseT#` State# i (locUnbox l) +runParseT :: ParseT e a -> ByteString -> Loc -> Result e a +runParseT p i l = ResultBox $ p `runParseT#` State# i (locUnbox l) {-# INLINE runParseT #-} mapParseT :: @@ -190,7 +197,7 @@ runParse# :: Parse e a -> State# -> Result# e a runParse# = runParseT# {-# INLINE runParse# #-} -runParse :: Parse e a -> ByteString -> Loc -> Result# e a +runParse :: Parse e a -> ByteString -> Loc -> Result e a runParse = runParseT {-# INLINE runParse #-}