-dsCoercion :: ExprCoFn -> DsM CoreExpr -> DsM CoreExpr
-dsCoercion CoHole thing_inside = thing_inside
-dsCoercion (CoCompose c1 c2) thing_inside = dsCoercion c1 (dsCoercion c2 thing_inside)
-dsCoercion (CoLams ids c) thing_inside = do { expr <- dsCoercion c thing_inside
- ; return (mkLams ids expr) }
-dsCoercion (CoTyLams tvs c) thing_inside = do { expr <- dsCoercion c thing_inside
- ; return (mkLams tvs expr) }
-dsCoercion (CoApps c ids) thing_inside = do { expr <- dsCoercion c thing_inside
- ; return (mkVarApps expr ids) }
-dsCoercion (CoTyApps c tys) thing_inside = do { expr <- dsCoercion c thing_inside
- ; return (mkTyApps expr tys) }
-dsCoercion (CoLet bs c) thing_inside = do { prs <- dsLHsBinds bs
- ; expr <- dsCoercion c thing_inside
+dsCoercion :: HsWrapper -> DsM CoreExpr -> DsM CoreExpr
+dsCoercion WpHole thing_inside = thing_inside
+dsCoercion (WpCompose c1 c2) thing_inside = dsCoercion c1 (dsCoercion c2 thing_inside)
+dsCoercion (WpCo co) thing_inside = do { expr <- thing_inside
+ ; return (Cast expr co) }
+dsCoercion (WpLam id) thing_inside = do { expr <- thing_inside
+ ; return (Lam id expr) }
+dsCoercion (WpTyLam tv) thing_inside = do { expr <- thing_inside
+ ; return (Lam tv expr) }
+dsCoercion (WpApp id) thing_inside = do { expr <- thing_inside
+ ; return (App expr (Var id)) }
+dsCoercion (WpTyApp ty) thing_inside = do { expr <- thing_inside
+ ; return (App expr (Type ty)) }
+dsCoercion (WpLet bs) thing_inside = do { prs <- dsLHsBinds bs
+ ; expr <- thing_inside