@@ -1008,6 +1008,9 @@ data TT n = P NameType n (TT n) -- ^ named references with type
1008 -- (-1) is a special case for 'subtract one from BI'
1008 -- (-1) is a special case for 'subtract one from BI'
1009 | Erased -- ^ an erased term
1009 | Erased -- ^ an erased term
1010 | Impossible -- ^ special case for totality checking
1010 | Impossible -- ^ special case for totality checking
1011+ | Inferred (TT n) -- ^ For building case trees when coverage checkimg only.
1012+ -- Marks a term as being inferred by the machine, rather than
1013+ -- given by the programmer
1011 | TType UExp -- ^ the type of types at some level
1014 | TType UExp -- ^ the type of types at some level
1012 | UType Universe -- ^ Uniqueness type universe (disjoint from TType)
1015 | UType Universe -- ^ Uniqueness type universe (disjoint from TType)
1013 deriving (Ord, Functor, Data, Generic, Typeable)
1016 deriving (Ord, Functor, Data, Generic, Typeable)
@@ -1055,6 +1058,7 @@ instance Sized a => Sized (TT a) where
1055 size (TType u) = 1 + size u
1058 size (TType u) = 1 + size u
1056 size (Proj a _) = 1 + size a
1059 size (Proj a _) = 1 + size a
1057 size Impossible = 1
1060 size Impossible = 1
1061+ size (Inferred t) = size t
1058 size (UType u) = 1 + size u
1062 size (UType u) = 1 + size u
1060instance Pretty a o => Pretty (TT a) o where
1064instance Pretty a o => Pretty (TT a) o where
@@ -1379,6 +1383,7 @@ termSmallerThan x (V i) = True
1379termSmallerThan x (Constant c) = True
1383termSmallerThan x (Constant c) = True
1380termSmallerThan x Erased = True
1384termSmallerThan x Erased = True
1381termSmallerThan x Impossible = True
1385termSmallerThan x Impossible = True
1386+termSmallerThan x (Inferred t) = termSmallerThan x t
1382termSmallerThan x (TType u) = True
1387termSmallerThan x (TType u) = True
1383termSmallerThan x (UType u) = True
1388termSmallerThan x (UType u) = True
@@ -1421,6 +1426,7 @@ safeForgetEnv env (UType u) = Just $ RUType u
1421safeForgetEnv env Erased = Just $ RConstant Forgot
1426safeForgetEnv env Erased = Just $ RConstant Forgot
1422safeForgetEnv env (Proj tm i) = error "Don't know how to forget a projection"
1427safeForgetEnv env (Proj tm i) = error "Don't know how to forget a projection"
1423safeForgetEnv env Impossible = error "Don't know how to forget Impossible"
1428safeForgetEnv env Impossible = error "Don't know how to forget Impossible"
1429+safeForgetEnv env (Inferred t) = safeForgetEnv env t
1425-- | Introduce a 'Bind' into the given term for each element of the
1431-- | Introduce a 'Bind' into the given term for each element of the
1426-- given list of (name, binder) pairs.
1432-- given list of (name, binder) pairs.
@@ -1583,6 +1589,7 @@ prettyEnv env t = prettyEnv' env t False
1583 prettySe p env Erased debug = text "[_]"
1589 prettySe p env Erased debug = text "[_]"
1584 prettySe p env (TType i) debug = text "Type" <+> (text . show $ i)
1590 prettySe p env (TType i) debug = text "Type" <+> (text . show $ i)
1585 prettySe p env Impossible debug = text "Impossible"
1591 prettySe p env Impossible debug = text "Impossible"
1592+ prettySe p env (Inferred tm) debug = text "<" <+> prettySe p env tm debug <+> text ">"
1586 prettySe p env (UType u) debug = text (show u)
1593 prettySe p env (UType u) debug = text (show u)
1588 -- Render a `Binder` and its name
1595 -- Render a `Binder` and its name
@@ -1628,6 +1635,7 @@ showEnv' env t dbg = se 10 env t where
1628 se p env (Constant c) = show c
1635 se p env (Constant c) = show c
1629 se p env Erased = "[__]"
1636 se p env Erased = "[__]"
1630 se p env Impossible = "[impossible]"
1637 se p env Impossible = "[impossible]"
1638+ se p env (Inferred t) = "<" ++ se p env t ++ ">"
1631 se p env (TType i) = "Type " ++ show i
1639 se p env (TType i) = "Type " ++ show i
1632 se p env (UType u) = show u
1640 se p env (UType u) = show u
@@ -1736,6 +1744,7 @@ pprintTT bound tm = pp startPrec bound tm
1736 text "!" <> text (show i)
1744 text "!" <> text (show i)
1737 pp p bound Erased = text "<<<erased>>>"
1745 pp p bound Erased = text "<<<erased>>>"
1738 pp p bound Impossible = text "<<<impossible>>>"
1746 pp p bound Impossible = text "<<<impossible>>>"
1747+ pp p bound (Inferred t) = text "<" <+> pp p bound t <+> text ">"
1739 pp p bound (TType ue) = annotate (AnnType "Type" "The type of types") $
1748 pp p bound (TType ue) = annotate (AnnType "Type" "The type of types") $
1740 text "Type"
1749 text "Type"
1741 pp p bound (UType u) = text (show u)
1750 pp p bound (UType u) = text (show u)