git.iko.soy/typeable/attoparsec
on master help sign in
Add a compareResults function
commitfdcad234543461dbc192c7996ecf97feea37a0d4 authorBryan O'Sullivan <bos@serpentine.com> dateTue 14 Aug 2012, 17:19 (14 years ago) parentb51f1ff
5 files changed+38
Data/Attoparsec/ByteString.hs+2 Data/Attoparsec/ByteString/Char8.hs+2 Data/Attoparsec/Internal.hs+31 Data/Attoparsec/Text.hs+2 attoparsec.cabal+1
Data/Attoparsec/ByteString.hs+2
@@ -25,6 +25,7 @@ module Data.Attoparsec.ByteString
2525 I.Parser
2626 , Result
2727 , T.IResult(..)
28+ , I.compareResults
2829
2930 -- * Running parsers
3031 , parse
@@ -75,6 +76,7 @@ module Data.Attoparsec.ByteString
7576
7677import Data.Attoparsec.Combinator
7778import qualified Data.Attoparsec.ByteString.Internal as I
79+import qualified Data.Attoparsec.Internal as I
7880import qualified Data.ByteString as B
7981import Data.Attoparsec.ByteString.Internal (Result, parse)
8082import qualified Data.Attoparsec.Internal.Types as T
Data/Attoparsec/ByteString/Char8.hs+2
@@ -22,6 +22,7 @@ module Data.Attoparsec.ByteString.Char8
2222 Parser
2323 , A.Result
2424 , A.IResult(..)
25+ , I.compareResults
2526
2627 -- * Running parsers
2728 , A.parse
@@ -118,6 +119,7 @@ import Data.Word (Word8, Word16, Word32, Word64, Word)
118119import Prelude hiding (takeWhile)
119120import qualified Data.Attoparsec.ByteString as A
120121import qualified Data.Attoparsec.ByteString.Internal as I
122+import qualified Data.Attoparsec.Internal as I
121123import qualified Data.ByteString as B8
122124import qualified Data.ByteString.Char8 as B
123125
Data/Attoparsec/Internal.hsnew file+31
@@ -0,0 +1,31 @@
1+-- |
2+-- Module : Data.Attoparsec.Internal
3+-- Copyright : Bryan O'Sullivan 2012
4+-- License : BSD3
5+--
6+-- Maintainer : bos@serpentine.com
7+-- Stability : experimental
8+-- Portability : unknown
9+--
10+-- Simple, efficient parser combinators, loosely based on the Parsec
11+-- library.
12+
13+module Data.Attoparsec.Internal
14+ (
15+ compareResults
16+ ) where
17+
18+import Data.Attoparsec.Internal.Types (IResult(..))
19+
20+-- | Compare two 'IResult' values for equality.
21+--
22+-- If both 'IResult's are 'Partial', the result will be 'Nothing', as
23+-- they are incomplete and hence their equality cannot be known.
24+-- (This is why there is no 'Eq' instance for 'IResult'.)
25+compareResults :: (Eq t, Eq r) => IResult t r -> IResult t r -> Maybe Bool
26+compareResults (Fail i0 ctxs0 msg0) (Fail i1 ctxs1 msg1) =
27+ Just (i0 == i1 && ctxs0 == ctxs1 && msg0 == msg1)
28+compareResults (Done i0 r0) (Done i1 r1) =
29+ Just (i0 == i1 && r0 == r1)
30+compareResults (Partial _) (Partial _) = Nothing
31+compareResults _ _ = Just False
Data/Attoparsec/Text.hs+2
@@ -27,6 +27,7 @@ module Data.Attoparsec.Text
2727 Parser
2828 , Result
2929 , T.IResult(..)
30+ , I.compareResults
3031
3132 -- * Running parsers
3233 , parse
@@ -111,6 +112,7 @@ import Data.Int (Int8, Int16, Int32, Int64)
111112import Data.Ratio ((%))
112113import Data.Text (Text)
113114import Data.Word (Word8, Word16, Word32, Word64, Word)
115+import qualified Data.Attoparsec.Internal as I
114116import qualified Data.Attoparsec.Internal.Types as T
115117import qualified Data.Attoparsec.Text.Internal as I
116118import qualified Data.Text as T
attoparsec.cabal+1
@@ -60,6 +60,7 @@ library
6060 Data.Attoparsec.Zepto
6161 other-modules: Data.Attoparsec.ByteString.FastSet
6262 Data.Attoparsec.ByteString.Internal
63+ Data.Attoparsec.Internal
6364 Data.Attoparsec.Internal.Types
6465 Data.Attoparsec.Text.FastSet
6566 Data.Attoparsec.Text.Internal