{-# LANGUAGE OverloadedStrings #-}
module Render.Interaction where
import Agda.Interaction.Base
import Agda.TypeChecking.Monad
import Render.Class
import Render.Name ()
import Render.Position ()
import Render.RichText
import Render.TypeChecking ()
--------------------------------------------------------------------------------
-- | OutputForm
instance (Render a, Render b) => Render (OutputForm a b) where
render (OutputForm r pids c) = fsep [render c, prange r, prPids pids]
where
prPids [] = mempty
prPids [pid] = parens $ "problem" <+> render pid
prPids pids' = parens $ "problems" <+> fsep (punctuate "," $ map render pids')
prange rr
| null s = mempty
| otherwise = text $ " [ at " ++ s ++ " ]"
where
s = show $ render rr
-- | OutputConstraint
instance (Render a, Render b) => Render (OutputConstraint a b) where
render (OfType name expr) =
render name <> " : " <> render expr
render (JustType name) =
"Type " <> render name
render (JustSort name) =
"Sort " <> render name
render (CmpInType cmp expr name1 name2) =
render name1
<> " "
<> render cmp
<> " "
<> render name2
<> " : "
<> render expr
render (CmpElim pols expr names1 names2) =
render names1
<> " "
<> render pols
<> " "
<> render names2
<> " : "
<> render expr
render (CmpTypes cmp name1 name2) =
render name1
<> " "
<> render cmp
<> " "
<> render name2
render (CmpLevels cmp name1 name2) =
render name1
<> " "
<> render cmp
<> " "
<> render name2
render (CmpTeles cmp name1 name2) =
render name1
<> " "
<> render cmp
<> " "
<> render name2
render (CmpSorts cmp name1 name2) =
render name1
<> " "
<> render cmp
<> " "
<> render name2
render (Guard x (ProblemId pid)) =
fsep
[ render x
<> parens ("blocked by problem " <> render pid)
]
render (Assign name expr) =
render name <> " := " <> render expr
render (TypedAssign name expr1 expr2) =
render name <> " := " <> render expr1 <> " :? " <> render expr2
render (PostponedCheckArgs name exprs expr1 expr2) =
let exprs' = map (parens . render) exprs
in render name <> " := "
<> parens ("_ : " <> render expr1)
<> " "
<> fsep exprs'
<> " : "
<> render expr2
render (IsEmptyType expr) =
"Is empty: " <> render expr
render (SizeLtSat expr) =
"Not empty type of sizes: " <> render expr
render (FindInstanceOF name expr exprs) =
let exprs' = map (\(e, t) -> render e <> " : " <> render t) exprs
in fsep
[ "Resolve instance argument ",
render name <> " : " <> render expr,
"Candidate:",
vcat exprs'
]
render (PTSInstance name1 name2) =
"PTS instance for ("
<> render name1
<> ", "
<> render name2
<> ")"
render (PostponedCheckFunDef name expr) =
"Check definition of "
<> render name
<> " : "
<> render expr
-- | IPBoundary'
instance Render c => Render (IPBoundary' c) where
render (IPBoundary eqs val meta over) = do
let xs = map (\(l, r) -> render l <+> "=" <+> render r) eqs
rhs = case over of
Overapplied -> "=" <+> render meta
NotOverapplied -> mempty
fsep (punctuate "," xs) <+> "⊢" <+> render val <+> rhs