Idris2/tests/idris2/reflection/reflection003/refprims.idr
2023-09-07 14:57:22 +01:00

55 lines
1.5 KiB
Idris

import Language.Reflection
%language ElabReflection
logPrims : Elab a
logPrims
= do ns <- getType `{ (++) }
traverse_ (\ (n, ty) =>
do logMsg "" 0 ("Name: " ++ show n)
logTerm "" 0 "Type" ty
logSugaredTerm "" 0 "Pretty Type" ty
) ns
fail "Not really trying"
logDataCons : Elab a
logDataCons
= do [(n, _)] <- getType `{ Nat }
| _ => fail "Ambiguous name"
logMsg "" 0 ("Resolved name: " ++ show n)
logMsg "" 0 ("Constructors: " ++ show !(getCons n))
fail "Still not trying"
logBad : Elab a
logBad
= do [(n, _)] <- getType `{ DoesntExist }
| [] => fail "Undefined name"
| _ => fail "Ambiguous name"
logMsg "" 0 ("Resolved name: " ++ show n)
logMsg "" 0 ("Constructors: " ++ show !(getCons n))
fail "Still not trying"
-- because the exact sequence number in a gensym depends on
-- the library and compiler internals we need to censor it so the
-- output won't be overly dependent on the exact versions used.
censorDigits : String -> String
censorDigits str = pack $ map (\c => if isDigit c then 'X' else c) (unpack str)
tryGenSym : Elab a
tryGenSym
= do n <- genSym "plus"
ns <- inCurrentNS n
fail $ "failed after generating " ++ censorDigits (show ns)
dummy1 : a
dummy1 = %runElab logPrims
dummy2 : a
dummy2 = %runElab logDataCons
dummy3 : a
dummy3 = %runElab logBad
dummy4 : a
dummy4 = %runElab tryGenSym