kure 0.2.2 → 0.2.3
raw patch · 2 files changed
+27/−18 lines, 2 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Language.KURE.Term: promoteU :: (Monad m, Term exp, Monoid dec) => Translate m dec exp r -> Translate m dec (Generic exp) r
- Language.KURE.Term: alltdR :: (e ~ (Generic e), Walker m dec e) => Rewrite m dec e -> Rewrite m dec e
+ Language.KURE.Term: alltdR :: (e ~ (Generic e), Walker m dec e) => Rewrite m dec (Generic e) -> Rewrite m dec (Generic e)
- Language.KURE.Term: bottomupR :: (e ~ (Generic e), Walker m dec e) => Rewrite m dec e -> Rewrite m dec e
+ Language.KURE.Term: bottomupR :: (e ~ (Generic e), Walker m dec e) => Rewrite m dec (Generic e) -> Rewrite m dec (Generic e)
- Language.KURE.Term: downupR :: (e ~ (Generic e), Walker m dec e) => Rewrite m dec e -> Rewrite m dec e
+ Language.KURE.Term: downupR :: (e ~ (Generic e), Walker m dec e) => Rewrite m dec (Generic e) -> Rewrite m dec (Generic e)
- Language.KURE.Term: foldU :: (e ~ (Generic e), Walker m dec e, Monoid r) => Translate m dec e r -> Translate m dec e r
+ Language.KURE.Term: foldU :: (e ~ (Generic e), Walker m dec e, Monoid r) => Translate m dec (Generic e) r -> Translate m dec (Generic e) r
- Language.KURE.Term: innermostR :: (e ~ (Generic e), Walker m dec e) => Rewrite m dec e -> Rewrite m dec e
+ Language.KURE.Term: innermostR :: (e ~ (Generic e), Walker m dec e) => Rewrite m dec (Generic e) -> Rewrite m dec (Generic e)
- Language.KURE.Term: topdownR :: (e ~ (Generic e), Walker m dec e) => Rewrite m dec e -> Rewrite m dec e
+ Language.KURE.Term: topdownR :: (e ~ (Generic e), Walker m dec e) => Rewrite m dec (Generic e) -> Rewrite m dec (Generic e)
Files
- Language/KURE/Term.hs +24/−16
- kure.cabal +3/−2
Language/KURE/Term.hs view
@@ -13,6 +13,7 @@ , extractR , promoteR , extractU+ , promoteU , topdownR , bottomupR , alltdR @@ -21,10 +22,10 @@ , foldU ) where -import Language.KURE.RewriteMonad as M +import Language.KURE.RewriteMonad import Language.KURE.Translate import Language.KURE.Rewrite-import Language.KURE.Combinators -- perhaps+import Language.KURE.Combinators import Control.Monad import Data.Monoid@@ -37,11 +38,10 @@ -- will have a new datatype for the 'Generic', which will also be an instance of class 'Term'. type Generic exp - -- | 'project' projects into a 'Generic' exp, to get the exp inside, or fail.- -- TODO: rename as select+ -- | 'project' projects into a 'Generic', to get the exp inside, or fails. select :: Generic exp -> Maybe exp - -- | 'inject' injects an exp into a 'Generic' exp.+ -- | 'inject' injects an exp into a 'Generic'. inject :: exp -> Generic exp @@ -54,7 +54,7 @@ ------------------------------------------------------------------------------ --- | 'extract' converts a 'Rewrite' over a 'Generic' into a rewrite over a specific expression type. +-- | 'extractR' converts a 'Rewrite' over a 'Generic' into a rewrite over a specific expression type. extractR :: (Monad m, Term exp, Monoid dec) => Rewrite m dec (Generic exp) -> Rewrite m dec exp -- at *this* type extractR rr = rewrite $ \ e -> transparently $ do@@ -63,7 +63,12 @@ Nothing -> fail "extractR" Just r -> return r --- | 'promote' promotes a 'Rewrite' into a 'Generic' 'Rewrite'; other types inside Generic cause failure.+-- | 'extractU' converts a 'Translate' taking a 'Generic' into a translate over a specific expression type. ++extractU :: (Monad m, Term exp, Monoid dec) => Translate m dec (Generic exp) r -> Translate m dec exp r+extractU rr = translate $ \ e -> transparently $ apply rr (inject e)++-- | 'promoteR' promotes a 'Rewrite' into a 'Generic' 'Rewrite'; other types inside Generic cause failure. -- 'try' can be used to convert a failure-by-default promotion into a 'id-by-default' promotion. promoteR :: (Monad m, Term exp, Monoid dec) => Rewrite m dec exp -> Rewrite m dec (Generic exp)@@ -74,35 +79,38 @@ r <- apply rr e' return (inject r) --- | 'accept' +-- | 'promoteU' promotes a 'Translate' into a 'Generic' 'Translate'; other types inside Generic cause failure. -extractU :: (Monad m, Term exp, Monoid dec) => Translate m dec (Generic exp) r -> Translate m dec exp r-extractU rr = translate $ \ e -> transparently $ apply rr (inject e)+promoteU :: (Monad m, Term exp, Monoid dec) => Translate m dec exp r -> Translate m dec (Generic exp) r+promoteU rr = translate $ \ e -> transparently $ do+ case select e of+ Nothing -> fail "promoteI"+ Just e' -> apply rr e' ------------------------------------------------------------------------------- -- apply a rewrite in a top down manner.-topdownR :: (e ~ Generic e, Walker m dec e) => Rewrite m dec e -> Rewrite m dec e+topdownR :: (e ~ Generic e, Walker m dec e) => Rewrite m dec (Generic e) -> Rewrite m dec (Generic e) topdownR s = s >-> allR (topdownR s) -- apply a rewrite in a bottom up manner.-bottomupR :: (e ~ Generic e, Walker m dec e) => Rewrite m dec e -> Rewrite m dec e+bottomupR :: (e ~ Generic e, Walker m dec e) => Rewrite m dec (Generic e) -> Rewrite m dec (Generic e) bottomupR s = allR (bottomupR s) >-> s -- apply a rewrite in a top down manner, prunning at successful rewrites.-alltdR :: (e ~ Generic e, Walker m dec e) => Rewrite m dec e -> Rewrite m dec e+alltdR :: (e ~ Generic e, Walker m dec e) => Rewrite m dec (Generic e) -> Rewrite m dec (Generic e) alltdR s = s <+ allR (alltdR s) -- apply a rewrite twice, in a topdown and bottom up way, using one single tree traversal.-downupR :: (e ~ Generic e, Walker m dec e) => Rewrite m dec e -> Rewrite m dec e+downupR :: (e ~ Generic e, Walker m dec e) => Rewrite m dec (Generic e) -> Rewrite m dec (Generic e) downupR s = s >-> allR (downupR s) >-> s -- a fixed point traveral, starting with the innermost term.-innermostR :: (e ~ Generic e, Walker m dec e) => Rewrite m dec e -> Rewrite m dec e+innermostR :: (e ~ Generic e, Walker m dec e) => Rewrite m dec (Generic e) -> Rewrite m dec (Generic e) innermostR s = bottomupR (tryR (s >-> innermostR s)) -- fold a tree using a single translation for each node.-foldU :: (e ~ Generic e, Walker m dec e, Monoid r) => Translate m dec e r -> Translate m dec e r+foldU :: (e ~ Generic e, Walker m dec e, Monoid r) => Translate m dec (Generic e) r -> Translate m dec (Generic e) r foldU s = concatT [ s, crushU (foldU s) ] -------------------------------------------------------------------------------
kure.cabal view
@@ -1,5 +1,5 @@ Name: kure-Version: 0.2.2+Version: 0.2.3 Synopsis: Combinators for Strategic Programming Description: KURE is a DSL for building rewriting DSLs. KURE shares combinator names and concepts with Stratego, but unlike Stratego, KURE is strongly typed.@@ -35,8 +35,9 @@ Ghc-Options: -Wall + --Executable test1--- Ghc-Options: -fhpc+-- Ghc-Options: -- Main-Is: Test.hs -- Hs-Source-Dirs: ., test -- buildable: True