From 2f163a3515fac7a95c224d907267c73b0d90d03b Mon Sep 17 00:00:00 2001 From: simonmar Date: Fri, 25 Apr 2003 10:23:29 +0000 Subject: [PATCH] [project @ 2003-04-25 10:23:29 by simonmar] doc fixes --- Text/ParserCombinators/ReadP.hs | 151 +++++++++++++++++++-------------------- 1 file changed, 75 insertions(+), 76 deletions(-) diff --git a/Text/ParserCombinators/ReadP.hs b/Text/ParserCombinators/ReadP.hs index 89d9988..32b6cfc 100644 --- a/Text/ParserCombinators/ReadP.hs +++ b/Text/ParserCombinators/ReadP.hs @@ -273,84 +273,83 @@ These can be seen as formal specifications of the behavior of the combinators. We use bags to give semantics to the combinators. -@ - type Bag a = [a] -@ + +> type Bag a = [a] + Equality on bags does not care about the order of elements. -@ - (=~) :: Ord a => Bag a -> Bag a -> Bool - xs =~ ys = sort xs == sort ys -@ + +> (=~) :: Ord a => Bag a -> Bag a -> Bool +> xs =~ ys = sort xs == sort ys + A special equality operator to avoid unresolved overloading when testing the properties. -@ - (=~.) :: Bag (Int,String) -> Bag (Int,String) -> Bool - (=~.) = (=~) -@ + +> (=~.) :: Bag (Int,String) -> Bag (Int,String) -> Bool +> (=~.) = (=~) + Here follow the properties: -@ - prop_Get_Nil = - readP_to_S get [] =~ [] - - prop_Get_Cons c s = - readP_to_S get (c:s) =~ [(c,s)] - - prop_Look s = - readP_to_S look s =~ [(s,s)] - - prop_Fail s = - readP_to_S pfail s =~. [] - - prop_Return x s = - readP_to_S (return x) s =~. [(x,s)] - - prop_Bind p k s = - readP_to_S (p >>= k) s =~. - [ ys'' - | (x,s') <- readP_to_S p s - , ys'' <- readP_to_S (k (x::Int)) s' - ] - - prop_Plus p q s = - readP_to_S (p +++ q) s =~. - (readP_to_S p s ++ readP_to_S q s) - - prop_LeftPlus p q s = - readP_to_S (p <++ q) s =~. - (readP_to_S p s +<+ readP_to_S q s) - where - [] +<+ ys = ys - xs +<+ _ = xs - - prop_Gather s = - forAll readPWithoutReadS $ \p -> - readP_to_S (gather p) s =~ - [ ((pre,x::Int),s') - | (x,s') <- readP_to_S p s - , let pre = take (length s - length s') s - ] - - prop_String_Yes this s = - readP_to_S (string this) (this ++ s) =~ - [(this,s)] - - prop_String_Maybe this s = - readP_to_S (string this) s =~ - [(this, drop (length this) s) | this `isPrefixOf` s] - - prop_Munch p s = - readP_to_S (munch p) s =~ - [(takeWhile p s, dropWhile p s)] - - prop_Munch1 p s = - readP_to_S (munch1 p) s =~ - [(res,s') | let (res,s') = (takeWhile p s, dropWhile p s), not (null res)] - - prop_Choice ps s = - readP_to_S (choice ps) s =~. - readP_to_S (foldr (+++) pfail ps) s - - prop_ReadS r s = - readP_to_S (readS_to_P r) s =~. r s -@ + +> prop_Get_Nil = +> readP_to_S get [] =~ [] +> +> prop_Get_Cons c s = +> readP_to_S get (c:s) =~ [(c,s)] +> +> prop_Look s = +> readP_to_S look s =~ [(s,s)] +> +> prop_Fail s = +> readP_to_S pfail s =~. [] +> +> prop_Return x s = +> readP_to_S (return x) s =~. [(x,s)] +> +> prop_Bind p k s = +> readP_to_S (p >>= k) s =~. +> [ ys'' +> | (x,s') <- readP_to_S p s +> , ys'' <- readP_to_S (k (x::Int)) s' +> ] +> +> prop_Plus p q s = +> readP_to_S (p +++ q) s =~. +> (readP_to_S p s ++ readP_to_S q s) +> +> prop_LeftPlus p q s = +> readP_to_S (p <++ q) s =~. +> (readP_to_S p s +<+ readP_to_S q s) +> where +> [] +<+ ys = ys +> xs +<+ _ = xs +> +> prop_Gather s = +> forAll readPWithoutReadS $ \p -> +> readP_to_S (gather p) s =~ +> [ ((pre,x::Int),s') +> | (x,s') <- readP_to_S p s +> , let pre = take (length s - length s') s +> ] +> +> prop_String_Yes this s = +> readP_to_S (string this) (this ++ s) =~ +> [(this,s)] +> +> prop_String_Maybe this s = +> readP_to_S (string this) s =~ +> [(this, drop (length this) s) | this `isPrefixOf` s] +> +> prop_Munch p s = +> readP_to_S (munch p) s =~ +> [(takeWhile p s, dropWhile p s)] +> +> prop_Munch1 p s = +> readP_to_S (munch1 p) s =~ +> [(res,s') | let (res,s') = (takeWhile p s, dropWhile p s), not (null res)] +> +> prop_Choice ps s = +> readP_to_S (choice ps) s =~. +> readP_to_S (foldr (+++) pfail ps) s +> +> prop_ReadS r s = +> readP_to_S (readS_to_P r) s =~. r s -} -- 1.7.10.4