@@ -1650,6 +1650,28 @@ runTactical fc env tm = do tm' <- eval tm
16501650 else fmap fst . get_type_val $
16511651 RApp (Var (sNS (sUN "Nothing") ["Maybe", "Prelude"]))
16521652 (Var (reflm "TT"))
1653+ | n == tacN "prim__LookupTy", [n] <- args
1654+ = do n' <- reifyTTName n
1655+ ctxt <- get_context
1656+ let getNameTypeAndType = \case Function ty _ -> (Ref, ty)
1657+ TyDecl nt ty -> (nt, ty)
1658+ Operator ty _ _ -> (Ref, ty)
1659+ CaseOp _ ty _ _ _ _ -> (Ref, ty)
1660+ -- Idris tuples nest to the right
1661+ reflectTriple (x, y, z) =
1662+ raw_apply (Var pairCon) [ Var (reflm "TTName")
1663+ , raw_apply (Var pairTy) [Var (reflm "NameType"), Var (reflm "TT")]
1664+ , x
1665+ , raw_apply (Var pairCon) [ Var (reflm "NameType"), Var (reflm "TT")
1666+ , y, z]]
1667+ let defs = [ reflectTriple (reflectName n, reflectNameType nt, reflect ty)
1668+ | (n, def) <- lookupNameDef n' ctxt
1669+ , let (nt, ty) = getNameTypeAndType def ]
1670+ fmap fst . get_type_val $
1671+ rawList (raw_apply (Var pairTy) [ Var (reflm "TTName")
1672+ , raw_apply (Var pairTy) [ Var (reflm "NameType")
1673+ , Var (reflm "TT")]])
1674+ defs
16531675 | n == tacN "prim__SourceLocation", [] <- args
16541676 = fmap fst . get_type_val $
16551677 reflectFC fc