1
1
mirror of https://github.com/github/semantic.git synced 2024-12-20 05:11:44 +03:00

Address Tim's suggestions: things are looking way nicer.

This commit is contained in:
Patrick Thomson 2018-09-18 17:46:05 -04:00
parent efb0b0a0f7
commit 79c29a7006

View File

@ -86,9 +86,6 @@ import Data.Term
-- encompasses both 'cata' and 'para', so you can use them to fold -- encompasses both 'cata' and 'para', so you can use them to fold
-- over 'Recursive' data types. Rules are covariant in their result -- over 'Recursive' data types. Rules are covariant in their result
-- type and contravariant in their environment and input parameters. -- type and contravariant in their environment and input parameters.
--
-- | Unlike KURE, a 'Rule' is a functor, applicative, monad, &c. with
-- no regard to its inner monad parameter.
data RuleM env (m :: * -> *) from to where data RuleM env (m :: * -> *) from to where
Then :: RuleM env m from a -> (a -> RuleM env m from b) -> RuleM env m from b Then :: RuleM env m from a -> (a -> RuleM env m from b) -> RuleM env m from b
Dimap :: (a -> b) -> (c -> d) -> RuleM env m b c -> RuleM env m a d Dimap :: (a -> b) -> (c -> d) -> RuleM env m b c -> RuleM env m a d
@ -109,10 +106,11 @@ data RuleM env (m :: * -> *) from to where
Somewhere :: ( Apply Functor fs, Apply Foldable fs, Apply Traversable fs Somewhere :: ( Apply Functor fs, Apply Foldable fs, Apply Traversable fs
, f :< fs, g :< fs , f :< fs, g :< fs
, term ~ Term (Sum fs) ann
) )
=> RuleM (env, Term (Sum fs) ann) m (f (Term (Sum fs) ann)) (g (Term (Sum fs) ann)) => RuleM (env, term) m (f term) (g term)
-> (Term (Sum fs) ann -> g (Term (Sum fs) ann) -> Term (Sum fs) ann) -> (term -> g term -> term)
-> RewriteM env m (Term (Sum fs) ann) -> RuleM env m term term
-- | @a >>> b@ succeeds only if both @a@ and @b@ succeed. @id@ is the -- | @a >>> b@ succeeds only if both @a@ and @b@ succeed. @id@ is the