mirror of
https://github.com/github/semantic.git
synced 2024-12-20 21:31:48 +03:00
Alternation distributes through binds over Location rules.
This commit is contained in:
parent
49449f5be2
commit
76feae64d7
@ -347,6 +347,7 @@ instance Enum grammar => Alternative (Assignment ast grammar) where
|
|||||||
(<|>) :: HasCallStack => Assignment ast grammar a -> Assignment ast grammar a -> Assignment ast grammar a
|
(<|>) :: HasCallStack => Assignment ast grammar a -> Assignment ast grammar a -> Assignment ast grammar a
|
||||||
Return a <|> _ = Return a
|
Return a <|> _ = Return a
|
||||||
(Children l `Then` continueL) <|> (Children r `Then` continueR) = Children (Left <$> l <|> Right <$> r) `Then` either continueL continueR
|
(Children l `Then` continueL) <|> (Children r `Then` continueR) = Children (Left <$> l <|> Right <$> r) `Then` either continueL continueR
|
||||||
|
(Location `Then` continueL) <|> (Location `Then` continueR) = Location `Then` uncurry (<|>) . (continueL &&& continueR)
|
||||||
l <|> r | Just c <- (liftA2 (IntMap.unionWith (<|>)) `on` choices) l r = Choose c `Then` identity
|
l <|> r | Just c <- (liftA2 (IntMap.unionWith (<|>)) `on` choices) l r = Choose c `Then` identity
|
||||||
| otherwise = wrap $ Alt l r
|
| otherwise = wrap $ Alt l r
|
||||||
where choices :: Assignment ast grammar a -> Maybe (IntMap (Assignment ast grammar a))
|
where choices :: Assignment ast grammar a -> Maybe (IntMap (Assignment ast grammar a))
|
||||||
|
Loading…
Reference in New Issue
Block a user