packages feed

derp 0.1.4 → 0.1.5

raw patch · 2 files changed

+32/−35 lines, 2 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Text.Derp: instance Ord a => ResultType a
- Text.Derp: (<|>) :: ResultType a => Parser a -> Parser a -> Parser a
+ Text.Derp: (<|>) :: Ord a => Parser a -> Parser a -> Parser a
- Text.Derp: (<~>) :: (ResultType a, ResultType b) => Parser a -> Parser b -> Parser (a, b)
+ Text.Derp: (<~>) :: (Ord a, Ord b) => Parser a -> Parser b -> Parser (a, b)
- Text.Derp: (==>) :: (ResultType a, ResultType b) => Parser a -> (a -> b) -> Parser b
+ Text.Derp: (==>) :: (Ord a, Ord b) => Parser a -> (a -> b) -> Parser b
- Text.Derp: (==>|) :: (ResultType a, ResultType b) => Parser a -> (Set a -> Set b) -> Parser b
+ Text.Derp: (==>|) :: (Ord a, Ord b) => Parser a -> (Set a -> Set b) -> Parser b
- Text.Derp: emp :: ResultType a => Parser a
+ Text.Derp: emp :: Ord a => Parser a
- Text.Derp: eps :: ResultType a => a -> Parser a
+ Text.Derp: eps :: Ord a => a -> Parser a
- Text.Derp: epsM :: ResultType a => Set a -> Parser a
+ Text.Derp: epsM :: Ord a => Set a -> Parser a
- Text.Derp: nul :: ResultType a => Parser a -> Parser a
+ Text.Derp: nul :: Ord a => Parser a -> Parser a
- Text.Derp: parseNull :: ResultType a => Parser a -> Set a
+ Text.Derp: parseNull :: Ord a => Parser a -> Set a
- Text.Derp: pzip :: (ResultType a, ResultType b) => Parser a -> Context a b -> Parser b
+ Text.Derp: pzip :: (Ord a, Ord b) => Parser a -> Context a b -> Parser b
- Text.Derp: runParse :: ResultType a => Parser a -> [Token] -> Set a
+ Text.Derp: runParse :: Ord a => Parser a -> [Token] -> Set a
- Text.Derp: runParseNum :: ResultType a => Int -> Parser a -> [Token] -> Set a
+ Text.Derp: runParseNum :: Ord a => Int -> Parser a -> [Token] -> Set a

Files

derp.cabal view
@@ -1,5 +1,5 @@ Name:                derp-Version:             0.1.4+Version:             0.1.5 Description:         A parser based on derivatives of parser combinators (Might                      and Darais).  Our paper on Arxiv details the theory of                      parsing with derivatives: <http://arxiv.org/abs/1010.5023>.
src/Text/Derp.hs view
@@ -41,25 +41,22 @@   }  data ParserRec p a where-  Alt :: (ResultType a)               => p a -> p a -> ParserRec p a-  Con :: (ResultType a, ResultType b) => p a -> p b -> ParserRec p (a, b)-  Red :: (ResultType a, ResultType b) => (Set a -> Set b) -> p a -> ParserRec p b-  Nul :: (ResultType a)               => p a -> ParserRec p a-  Zip :: (ResultType a, ResultType b) => p a -> ContextR p a b -> ParserRec p b-  Ter ::                                 String -> ParserRec p String-  Eps :: (ResultType a)               => Set a -> ParserRec p a-  Emp :: (ResultType a)               => ParserRec p a+  Alt :: (Ord a)        => p a -> p a -> ParserRec p a+  Con :: (Ord a, Ord b) => p a -> p b -> ParserRec p (a, b)+  Red :: (Ord a, Ord b) => (Set a -> Set b) -> p a -> ParserRec p b+  Nul :: (Ord a)        => p a -> ParserRec p a+  Zip :: (Ord a, Ord b) => p a -> ContextR p a b -> ParserRec p b+  Ter ::                   String -> ParserRec p String+  Eps :: (Ord a)        => Set a -> ParserRec p a+  Emp :: (Ord a)        => ParserRec p a  data ContextR p a b where-  ConContext :: (ResultType a, ResultType b) => p b -> ContextR p (a, b) c -> ContextR p a c-  RedContext :: (ResultType a, ResultType b) => (Set a -> Set b) -> ContextR p b c -> ContextR p a c-  TopContext :: (ResultType a) => ContextR p a a+  ConContext :: (Ord a, Ord b) => p b -> ContextR p (a, b) c -> ContextR p a c+  RedContext :: (Ord a, Ord b) => (Set a -> Set b) -> ContextR p b c -> ContextR p a c+  TopContext :: (Ord a)        => ContextR p a a  type Context a b = ContextR Parser a b -class (Ord a) => ResultType a-instance (Ord a) => ResultType a- -- | The input type for parsing.  For example the parser: -- -- > (ter "x") @@ -75,38 +72,38 @@ data Token = Token { tokenClass :: String, tokenValue :: String }   deriving (Eq, Ord, Show) -parser :: (ResultType a) => ParserRec Parser a -> FPValue Bool -> Parser a+parser :: (Ord a) => ParserRec Parser a -> FPValue Bool -> Parser a parser p n = fix $ \ self -> Parser p n (memoFun (deriveImp self)) (compactImp self)  -- | Alternation.-(<|>) :: (ResultType a) => Parser a -> Parser a -> Parser a+(<|>) :: (Ord a) => Parser a -> Parser a -> Parser a (<|>) a b = parser (Alt a b) FPUndecided  -- | Concatenation.-(<~>) :: (ResultType a, ResultType b) => Parser a -> Parser b -> Parser (a, b)+(<~>) :: (Ord a, Ord b) => Parser a -> Parser b -> Parser (a, b) (<~>) a b = parser (Con a b) FPUndecided  -- | Reduction.-(==>) :: (ResultType a, ResultType b) => Parser a -> (a -> b) -> Parser b+(==>) :: (Ord a, Ord b) => Parser a -> (a -> b) -> Parser b (==>) p f = p ==>| Set.map f -- | Set generalized version of `==>'.-(==>|) :: (ResultType a, ResultType b) => Parser a -> (Set a -> Set b) -> Parser b+(==>|) :: (Ord a, Ord b) => Parser a -> (Set a -> Set b) -> Parser b (==>|) p f = parser (Red f p) FPUndecided  -- | Null-parse extraction.-nul :: (ResultType a) => Parser a -> Parser a+nul :: (Ord a) => Parser a -> Parser a nul p = parser (Nul p) FPUndecided  -- | One-hole-context focus.-pzip :: (ResultType a, ResultType b) => Parser a -> Context a b -> Parser b+pzip :: (Ord a, Ord b) => Parser a -> Context a b -> Parser b pzip p c = parser (Zip p c) (FPDecided False)  -- | Terminal. ter :: String -> Parser String ter t = parser (Ter t) (FPDecided False)  -- | Epsilon/empty-string.-eps :: (ResultType a) => a -> Parser a+eps :: (Ord a) => a -> Parser a eps = epsM . Set.singleton -- | Set generalized version of `eps'.-epsM :: (ResultType a) => Set a -> Parser a+epsM :: (Ord a) => Set a -> Parser a epsM e = parser (Eps e) (FPDecided True)  -- | The empty language.-emp :: (ResultType a) => Parser a+emp :: (Ord a) => Parser a emp = parser Emp (FPDecided False)   infixr 3 <~>@@ -178,19 +175,19 @@     nulContext (RedContext f c) = RedContext f (nulContext c)     nulContext TopContext = TopContext -    thread :: (ResultType a, ResultType b, ResultType c) => Context a b -> Context b c -> Context a c+    thread :: (Ord a, Ord b, Ord c) => Context a b -> Context b c -> Context a c     thread TopContext d = d     thread (RedContext f c) d = RedContext f (thread c d)     thread (ConContext a c) d = ConContext a (thread c d) -    unfoldOne :: (ResultType a, ResultType b) => Parser a -> Context a b -> Parser b+    unfoldOne :: (Ord a, Ord b) => Parser a -> Context a b -> Parser b     unfoldOne a (ConContext b c) = pzip (a <~> b) c     unfoldOne a (RedContext f c) = unfoldOne (a ==>| f) c     unfoldOne _ TopContext = error "cannot unfold top"  -- | Extract the parse-null set of a parser. -parseNull :: (ResultType a) => Parser a -> Set a+parseNull :: (Ord a) => Parser a -> Set a parseNull p = work $ nul p   where     work (Parser (Eps sM) _ _ _) = sM@@ -199,11 +196,6 @@  -- running parsers --- | The number of compact steps that usually keeps a parser constant in size---   while parsing.-defaultCompactSteps :: Int-defaultCompactSteps = 10- -- | A specified number of compactions. compactNum :: Int -> Parser a -> Parser a compactNum 0 p = p@@ -214,10 +206,15 @@ deriveStepNum n p i = compactNum n $ derive p i  -- | Parse using a specified number of intermediate compactions.-runParseNum :: (ResultType a) => Int -> Parser a -> [Token] -> Set a+runParseNum :: (Ord a) => Int -> Parser a -> [Token] -> Set a runParseNum _ p [] = parseNull p runParseNum n p (i:is) = runParseNum n (deriveStepNum n p i) is +-- | The number of compact steps that usually keeps a parser constant in size+--   while parsing.+defaultCompactSteps :: Int+defaultCompactSteps = 10+ -- | Derivation followed by the default number of compactions. deriveStep :: Parser a -> Token -> Parser a deriveStep = deriveStepNum defaultCompactSteps@@ -241,7 +238,7 @@ -- -- > Set.fromList [9] ---runParse :: (ResultType a) => Parser a -> [Token] -> Set a+runParse :: (Ord a) => Parser a -> [Token] -> Set a runParse = runParseNum defaultCompactSteps  -- inspecting parsers