1
1
mirror of https://github.com/github/semantic.git synced 2024-11-25 02:58:36 +03:00

Rename Elem to Find.

This commit is contained in:
Rob Rix 2019-10-08 15:34:33 -04:00
parent da890fa747
commit da227888ce
No known key found for this signature in database
GPG Key ID: F188A01508EA1CF7

View File

@ -12,8 +12,8 @@ class Element sub sup where
-- | Project one element out of a sum type.
prj :: sup a -> Maybe (sub a)
instance (Element' elem sub sup, elem ~ Elem sub sup) => Element sub sup where
prj = prj' @elem
instance (Element' side sub sup, side ~ Find sub sup) => Element sub sup where
prj = prj' @side
pattern Prj :: Element sub sup => sub a -> sup a
@ -21,21 +21,21 @@ pattern Prj sub <- (prj -> Just sub)
data Side = None | Here | L | R
type family Elem sub sup :: Side where
Elem t t = 'Here
Elem t (l :+: r) = Elem' 'L t l <> Elem' 'R t r
Elem _ _ = 'None
type family Find sub sup :: Side where
Find t t = 'Here
Find t (l :+: r) = Find' 'L t l <> Find' 'R t r
Find _ _ = 'None
type family Elem' (side :: Side) sub sup :: Side where
Elem' s t t = s
Elem' s t (l :+: r) = Elem' s t l <> Elem' s t r
Elem' _ _ _ = 'None
type family Find' (side :: Side) sub sup :: Side where
Find' s t t = s
Find' s t (l :+: r) = Find' s t l <> Find' s t r
Find' _ _ _ = 'None
type family (a :: Side) <> (b :: Side) :: Side where
'None <> b = b
a <> _ = a
class Element' (elem :: Side) sub sup where
class Element' (side :: Side) sub sup where
prj' :: sup a -> Maybe (sub a)
instance {-# OVERLAPPABLE #-}