make :: Monad m => ExprGuiT.SugarExpr m -> ExprGuiM m (ExpressionGui m)
make sExpr =
    maybeShrink <*> makeEditor body pl
    & assignCursor
    where
        Sugar.Expression body pl = sExpr
        exprHiddenEntityIds =
            List.delete (pl ^. Sugar.plEntityId)
            (pl ^. Sugar.plData ^. ExprGuiT.plStoredEntityIds)
        myId = WidgetIds.fromExprPayload pl
        maybeShrink
            | or (pl ^. Sugar.plData ^. ExprGuiT.plInjected) = shrinkIfHigherThanLine
            | otherwise = pure id
        assignCursor x =
            foldr (`ExprGuiM.assignCursorPrefix` const myId) x $
            exprHiddenEntityIds <&> WidgetIds.fromEntityId
make :: Monad m => ExprGuiT.SugarExpr m -> ExprGuiM m (ExpressionGui m)
make sExpr =
    maybeShrink <*> makeEditor body pl
    & assignCursor
    where
        Sugar.Expression body pl = sExpr
        exprHiddenEntityIds =
            List.delete (pl ^. Sugar.plEntityId)
            (pl ^. Sugar.plData ^. ExprGuiT.plStoredEntityIds)
        myId = WidgetIds.fromExprPayload pl
        maybeShrink
            | or (pl ^. Sugar.plData ^. ExprGuiT.plInjected) = shrinkIfHigherThanLine
            | otherwise = pure id
        assignCursor x =
            foldr (`ExprGuiM.assignCursorPrefix` const myId) x $
            exprHiddenEntityIds <&> WidgetIds.fromEntityId
make sExpr =
    maybeShrink <*> makeEditor body pl
    & assignCursor
    where
        Sugar.Expression body pl = sExpr
        exprHiddenEntityIds =
            List.delete (pl ^. Sugar.plEntityId)
            (pl ^. Sugar.plData ^. ExprGuiT.plStoredEntityIds)
        myId = WidgetIds.fromExprPayload pl
        maybeShrink
            | or (pl ^. Sugar.plData ^. ExprGuiT.plInjected) = shrinkIfHigherThanLine
            | otherwise = pure id
        assignCursor x =
            foldr (`ExprGuiM.assignCursorPrefix` const myId) x $
            exprHiddenEntityIds <&> WidgetIds.fromEntityId