withReturn b
    | isExpression b = L [KW "return" , b ]
    | L exprs <- b   = case unsnoc exprs of
        Just (xs, x) -> L $ xs `snoc` withReturn x
    -- Throwing exceptions here for to catch edge cases.
    -- These conditions should not be met.
        Nothing      -> errorWithoutStackTrace ("addReturn: " <> show b)
    | otherwise      =  errorWithoutStackTrace ("addReturn: " <> show b)
withReturn b
    | isExpression b = L [KW "return" , b ]
    | L exprs <- b   = case unsnoc exprs of
        Just (xs, x) -> L $ xs `snoc` withReturn x
    -- Throwing exceptions here for to catch edge cases.
    -- These conditions should not be met.
        Nothing      -> errorWithoutStackTrace ("addReturn: " <> show b)
    | otherwise      =  errorWithoutStackTrace ("addReturn: " <> show b)
withReturn b
    | isExpression b = L [KW "return" , b ]
    | L exprs <- b   = case unsnoc exprs of
        Just (xs, x) -> L $ xs `snoc` withReturn x
    -- Throwing exceptions here for to catch edge cases.
    -- These conditions should not be met.
        Nothing      -> errorWithoutStackTrace ("addReturn: " <> show b)
    | otherwise      =  errorWithoutStackTrace ("addReturn: " <> show b)