-- | Term application: apply second given 'TermT' to the first,
-- applying embedded 'TeSym's, or return an error.
betaTerm ::
- forall src ss es vs fun arg.
+ forall src ss ts vs fun arg.
SourceInj (TypeVT src) src =>
Constable (->) =>
- Term src ss es vs (fun::K.Type) ->
- Term src ss es vs (arg::K.Type) ->
- Either (Error_Beta src) (TermT src ss es vs)
+ Term src ss ts vs (fun::K.Type) ->
+ Term src ss ts vs (arg::K.Type) ->
+ Either (Error_Beta src) (TermT src ss ts vs)
betaTerm (Term qf tf (TeSym te_fun)) (Term qa ta (TeSym te_arg)) =
case tf of
TyApp _ (TyApp _ a2b a2b_a) a2b_b
betaTerms ::
SourceInj (TypeVT src) src =>
Constable (->) =>
- BinTree (TermVT src ss es) ->
- Either (Error_Beta src) (TermVT src ss es)
+ BinTree (TermVT src ss ts) ->
+ Either (Error_Beta src) (TermVT src ss ts)
betaTerms t =
collapseBT (\acc ele -> do
TermVT (Term qf tf te_fun) <- acc
let tf'' = subst mgu tf'
let ta'' = subst mgu ta'
TermT (Term qr tr te_res) <- betaTerm (Term qf'' tf'' te_fun) (Term qa'' ta'' te_arg)
- normalizeVarsTy (qr #> tr) $ \(TyApp _ (TyApp _ _c qr') tr') ->
+ normalizeVarsTy (qr #> tr) $ \case
+ TyApp _ (TyApp _ _c qr') tr' ->
Right $ TermVT $ Term qr' tr' te_res
+ _ -> undefined -- FIXME: as of GHC 8.2, GHC is no longer clever enough to rule out other cases
) (Right <$> t)
-- * Type 'Error_Beta'