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:
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 #-}