12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152{-# OPTIONS --safe --without-K #-}module Reflection.Utils.Metas where open import Meta.Preludeopen import Meta.Init import Data.Bool.ListAction as Bopen import Data.Listimport Reflection.AST.Meta as Meta isMeta : Term → BoolisMeta = λ where (meta _ _) → true _ → false mutual findMetas : Term → List Term findMetas = λ where (var _ as) → findMetas* as (con _ as) → findMetas* as (def _ as) → findMetas* as (lam _ (abs _ x)) → findMetas x (pat-lam cs as) → findMetasCl cs ++ findMetas* as (pi (arg _ a) (abs _ b)) → findMetas a ++ findMetas b (sort _) → [] (lit _) → [] m@(meta x as) → m ∷ findMetas* as unknown → [] findMetas* : List (Arg Term) → List Term findMetas* = λ where [] → [] ((arg _ t) ∷ ts) → findMetas t ++ findMetas* ts findMetasCl : List Clause → List Term findMetasCl = λ where [] → [] (clause _ _ t ∷ c) → findMetas t ++ findMetasCl c (absurd-clause _ _ ∷ c) → findMetasCl c metaId : Term → Maybe MetametaId (meta x _) = just xmetaId _ = nothing findMetaIds : Term → List MetafindMetaIds = mapMaybe metaId ∘ findMetas firstMeta : Term → Maybe MetafirstMeta = head ∘ findMetaIds shareMeta : List Meta → List Meta → BoolshareMeta xs ys = B.any (λ x → B.any (Meta._≡ᵇ_ x) ys) xs