fixupUnify :: Monad m
           => ([UConstraint (TyAst ki ty) (TyAstVar a)] -> m (M.Map (TyAstVar a) (TyAst ki ty (TyAstVar a))))
           -> [UConstraint (Type ki ty) a]
           -> m (M.Map a (Type ki ty a))
fixupUnify u =
  let
    fixConstraint (UCEq a1 a2) = UCEq (review _Unwrapped a1) (review _Unwrapped a2)
    fixMap = undefined
  in
    fmap fixMap .
    u .
    fmap fixConstraint
fixupUnify :: Monad m
           => ([UConstraint (TyAst ki ty) (TyAstVar a)] -> m (M.Map (TyAstVar a) (TyAst ki ty (TyAstVar a))))
           -> [UConstraint (Type ki ty) a]
           -> m (M.Map a (Type ki ty a))
fixupUnify u =
  let
    fixConstraint (UCEq a1 a2) = UCEq (review _Unwrapped a1) (review _Unwrapped a2)
    fixMap = undefined
  in
    fmap fixMap .
    u .
    fmap fixConstraint
fixupUnify u =
  let
    fixConstraint (UCEq a1 a2) = UCEq (review _Unwrapped a1) (review _Unwrapped a2)
    fixMap = undefined
  in
    fmap fixMap .
    u .
    fmap fixConstraint