uu-parsinglib 2.3.3 → 2.3.4
raw patch · 3 files changed
+63/−75 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Text.ParserCombinators.UU.Core: newtype P st a
+ Text.ParserCombinators.UU.Core: data P st a
- Text.ParserCombinators.UU.Core: P :: (forall r. (a -> st -> Steps r) -> st -> Steps r, forall r. (st -> Steps r) -> st -> Steps (a, r), forall r. (st -> Steps r) -> st -> Steps r) -> P st a
+ Text.ParserCombinators.UU.Core: P :: (forall r. (a -> st -> Steps r) -> st -> Steps r) -> (forall r. (st -> Steps r) -> st -> Steps (a, r)) -> (forall r. (st -> Steps r) -> st -> Steps r) -> P st a
Files
- src/Text/ParserCombinators/UU/Core.hs +57/−72
- src/Text/ParserCombinators/UU/Derived.hs +1/−2
- uu-parsinglib.cabal +5/−1
src/Text/ParserCombinators/UU/Core.hs view
@@ -10,8 +10,7 @@ FlexibleInstances, FlexibleContexts, UndecidableInstances,- NoMonomorphismRestriction,- ImpredicativeTypes #-}+ NoMonomorphismRestriction #-} module Text.ParserCombinators.UU.Core ( module Text.ParserCombinators.UU.Core@@ -164,72 +163,62 @@ -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- do not change into data, or be prepared to add ~ at subtle places !!-newtype P st a = P ( forall r . (a -> st -> Steps r) -> st -> Steps r -- history parser- , forall r . ( st -> Steps r) -> st -> Steps (a, r) -- future parser- , forall r . ( st -> Steps r) -> st -> Steps r -- recogniser- ) -unP (P p) = p+data P st a = P (forall r . (a -> st -> Steps r) -> st -> Steps r ) -- history parser+ (forall r . ( st -> Steps r) -> st -> Steps (a, r) ) -- future parser+ (forall r . ( st -> Steps r) -> st -> Steps r ) -- recogniser instance Functor (P state) where - fmap f (P (ph, pf ,pr)) = P ( \ k -> ph ( k .f )- , \ k inp -> Apply (\(a,r) -> (f a, r)) (pf k inp) -- pure f <*> pf- , pr- ) + fmap f (P ph pf pr) = P ( \ k -> ph ( k .f ))+ ( \ k inp -> Apply (\(a,r) -> (f a, r)) (pf k inp)) -- pure f <*> pf+ (pr) instance Applicative (P state) where- P (ph, pf, pr) <*> P ~(qh, qf, qr) = P ( \ k -> ph (\ pr -> qh (\ qr -> k (pr qr)))- , (apply .) . (pf .qf)- , pr . qr- ) - pure a = P ( ($a)- , ((push a).)- , id- )+ P ph pf pr <*> ~(P qh qf qr) = P ( \ k -> ph (\ pr -> qh (\ qr -> k (pr qr))))+ ((apply .) . (pf .qf))+ ( pr . qr) + pure a = P ($a) ((push a).) id + instance Alternative (P state) where - P (ph, pf, pr) <|> P (qh, qf, qr) = P ( \ k inp -> ph k inp `best` qh k inp- , \ k inp -> pf k inp `best` qf k inp- , \ k inp -> pr k inp `best` qr k inp- ) - empty = P ( \ k inp -> noAlts- , \ k inp -> noAlts- , \ k inp -> noAlts- ) + P ph pf pr <|> P qh qf qr = P (\ k inp -> ph k inp `best` qh k inp)+ (\ k inp -> pf k inp `best` qf k inp)+ (\ k inp -> pr k inp `best` qr k inp)+ + empty = P ( \ k inp -> noAlts)+ ( \ k inp -> noAlts)+ ( \ k inp -> noAlts) instance ( Provides state symbol token) => Symbol (P state) symbol token where- pSym a = P ( \ k inp -> splitState a k inp- , \ k inp -> splitState a (\ t inp' -> push t (k inp')) inp- , \ k inp -> splitState a (\ _ inp' -> k inp') inp- )+ pSym a = P ( \ k inp -> splitState a k inp)+ ( \ k inp -> splitState a (\ t inp' -> push t (k inp')) inp)+ ( \ k inp -> splitState a (\ _ inp' -> k inp') inp) (<?>) :: P state a -> String -> P state a-P (ph, pf, pr) <?> label = P ( \ k inp -> replaceExpected ( ph k inp)- , \ k inp -> replaceExpected ( pf k inp)- , \ k inp -> replaceExpected ( pr k inp)- )+P ph pf pr <?> label = P ( \ k inp -> replaceExpected ( ph k inp))+ ( \ k inp -> replaceExpected ( pf k inp))+ ( \ k inp -> replaceExpected ( pr k inp)) where replaceExpected (Fail _ c) = (Fail [label] c) replaceExpected others = others data Id a = Id a deriving Show -- parse_h (P (ph, pf, pr)) = fst . eval . ph (\ a rest -> if eof rest then push a failAlways else error "pEnd missing?") -parse (P (ph, pf, pr)) = fst . eval . pf (\ rest -> if eof rest then failAlways else error "pEnd missing?")+parse (P ph pf pr) = fst . eval . pf (\ rest -> if eof rest then failAlways else error "pEnd missing?") -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- %%%%%%%%%%%%% Monads %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -unParser_h (P ( h , _ , _ )) = h-unParser_f (P ( _ , f , _ )) = f-unParser_r (P ( _ , _ , r )) = r+unParser_h (P h _ _ ) = h+unParser_f (P _ f _ ) = f+unParser_r (P _ _ r ) = r instance Monad (P st) where- P ( ph, pf, pr) >>= a2q = - P ( \k -> ph (\ a -> unParser_h (a2q a) k)- , \k -> ph (\ a -> unParser_f (a2q a) k)- , \k -> ph (\ a -> unParser_r (a2q a) k)- )+ P ph pf pr >>= a2q = + P ( \k -> ph (\ a -> unParser_h (a2q a) k))+ ( \k -> ph (\ a -> unParser_f (a2q a) k))+ ( \k -> ph (\ a -> unParser_r (a2q a) k)) return = pure -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@ -241,19 +230,18 @@ l@ (Step _ _) `best_gr` _ = l l `best_gr` r = l `best` r -P (ph, pf, pr) <<|> P (qh, qf, qr) = P ( \ k st -> norm (ph k st) `best_gr` norm (qh k st)- , \ k st -> norm (pf k st) `best_gr` norm (qf k st) - , \ k st -> norm (pr k st) `best_gr` norm (qr k st)- )+P ph pf pr <<|> P qh qf qr = P ( \ k st -> norm (ph k st) `best_gr` norm (qh k st))+ ( \ k st -> norm (pf k st) `best_gr` norm (qf k st))+ ( \ k st -> norm (pr k st) `best_gr` norm (qr k st))+ -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- %%%%%%%%%%%%% Ambiguous %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% amb :: P st a -> P st [a] -amb (P (ph, pf, pr)) = P ( \k -> removeEnd_h . ph (\ a st' -> End_h ([a], \ as -> k as st') noAlts)- , \k inp -> combinevalues . removeEnd_f $ pf (\st -> End_f [k st] noAlts) inp- , \k -> removeEnd_h . pr (\ st' -> End_h ([undefined], \ _ -> k st') noAlts)- )+amb (P ph pf pr) = P ( \k -> removeEnd_h . ph (\ a st' -> End_h ([a], \ as -> k as st') noAlts))+ ( \k inp -> combinevalues . removeEnd_f $ pf (\st -> End_f [k st] noAlts) inp)+ ( \k -> removeEnd_h . pr (\ st' -> End_h ([undefined], \ _ -> k st') noAlts)) removeEnd_h :: Steps (a, r) -> Steps r removeEnd_h (Fail m ls ) = Fail m (applyFail removeEnd_h ls)@@ -283,27 +271,25 @@ pErrors :: Stores st errors => P st errors pEnd :: (Stores st errors, Eof st) => P st errors -pErrors = P ( \ k inp -> let (errs, inp') = getErrors inp in k errs inp'- , \ k inp -> let (errs, inp') = getErrors inp in push errs (k inp')- , \ k inp -> let (errs, inp') = getErrors inp in k inp'- )+pErrors = P ( \ k inp -> let (errs, inp') = getErrors inp in k errs inp' )+ ( \ k inp -> let (errs, inp') = getErrors inp in push errs (k inp'))+ ( \ k inp -> let (errs, inp') = getErrors inp in k inp' ) pEnd = P ( \ k inp -> let deleterest inp = case deleteAtEnd inp of Nothing -> let (finalerrors, finalstate) = getErrors inp in k finalerrors finalstate Just (i, inp') -> Fail [] [const (i, deleterest inp')]- in deleterest inp- , \ k inp -> let deleterest inp = case deleteAtEnd inp of+ in deleterest inp)+ ( \ k inp -> let deleterest inp = case deleteAtEnd inp of Nothing -> let (finalerrors, finalstate) = getErrors inp in push finalerrors (k finalstate) Just (i, inp') -> Fail [] [const ((i, deleterest inp'))]- in deleterest inp- , \ k inp -> let deleterest inp = case deleteAtEnd inp of+ in deleterest inp)+ ( \ k inp -> let deleterest inp = case deleteAtEnd inp of Nothing -> let (finalerrors, finalstate) = getErrors inp in (k finalstate) Just (i, inp') -> Fail [] [const (i, deleterest inp')]- in deleterest inp- )+ in deleterest inp) {- -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@ -331,17 +317,16 @@ pSwitch :: (st1 -> (st2, st2 -> st1)) -> P st2 a -> P st1 a -pSwitch split (P (ph, pf, pr)) = P (\ k st1 -> let (st2, back) = split st1- in ph (\ a st2' -> k a (back st2')) st2- ,\ k st1 -> let (st2, back) = split st1- in pf (\st2' -> k (back st2')) st2- ,\ k st1 -> let (st2, back) = split st1- in pr (\st2' -> k (back st2')) st2- )+pSwitch split (P ph pf pr) = P (\ k st1 -> let (st2, back) = split st1+ in ph (\ a st2' -> k a (back st2')) st2)+ (\ k st1 -> let (st2, back) = split st1+ in pf (\st2' -> k (back st2')) st2)+ (\ k st1 -> let (st2, back) = split st1+ in pr (\st2' -> k (back st2')) st2) instance ExtApplicative (P st) where- P (ph, pf, pr) <* P ~(_ , _ , qr) = P ( ph. (qr.), pf. qr , pr . qr ) - P (_ , _ , pr) *> P ~(qh, qf, qr) = P ( pr . qh , pr. qf , pr . qr )- f <$ P ~(_, _, qr) = P ( qr . ($f) , \ k st -> push f (qr k st), qr )+ P ph pf pr <* ~(P _ _ qr) = P ( ph. (qr.)) (pf. qr) (pr . qr) + P _ _ pr *> ~(P qh qf qr) = P ( pr . qh ) (pr. qf) (pr . qr)+ f <$ ~(P _ _ qr) = P ( qr . ($f)) (\ k st -> push f (qr k st)) qr type Strings = [String]
src/Text/ParserCombinators/UU/Derived.hs view
@@ -5,8 +5,7 @@ FlexibleInstances, FlexibleContexts, UndecidableInstances,- NoMonomorphismRestriction,- ImpredicativeTypes #-}+ NoMonomorphismRestriction #-} module Text.ParserCombinators.UU.Derived where import Text.ParserCombinators.UU.Core
uu-parsinglib.cabal view
@@ -1,5 +1,5 @@ Name: uu-parsinglib-Version: 2.3.3+Version: 2.3.4 Build-Type: Simple License: MIT License-file: LICENSE@@ -41,6 +41,10 @@ . * added the infix operator with piority 2 <?> :: P state a -> String -> P st a which replaces the list of expected symbols in error message by its right argument String+ .+ Version 2.3.4+ .+ * removed dependecies on impredictaive types, preparing for next GHC version . Future versions above 2.3 .