transformations-0.1.0.0: Generics/MultiRec/Any.hs
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE GADTs #-}
module Generics.MultiRec.Any where
import Generics.MultiRec
data Any phi where
Any :: phi ix -> ix -> Any phi
-- | Unify an 'Any' with an @a@.
matchAny :: forall phi ix. EqS phi => phi ix -> Any phi -> Maybe ix
matchAny p (Any w x) = match' w x p where
match' :: EqS s => s b -> b -> s a -> Maybe a
match' w x w' = case eqS w w' of
Nothing -> Nothing
Just Refl -> Just x