func RightF(n int) func(string) string {
	return func(s string) string {
		return Right(s, n)
	}
}
RightF is the Filter version of Right.
package str
import (
	"fmt"
	"html"
	"math"
	"regexp"
	"runtime"
	"strconv"
	"strings"
	"unicode/utf8"
)
func Pad(s, c string, n int) string {
	L := len(s)
	if L >= n {
		return s
	}
	n -= L
	left := strings.Repeat(c, int(math.Ceil(float64(n)/2)))
	right := strings.Repeat(c, int(math.Floor(float64(n)/2)))
	return left + s + right
}
func PadF(c string, n int) func(string) string {
	return func(s string) string {
		return Pad(s, c, n)
	}
}
func PadLeft(s, c string, n int) string {
	L := len(s)
	if L > n {
		return s
	}
	return strings.Repeat(c, (n-L)) + s
}
func PadLeftF(c string, n int) func(string) string {
	return func(s string) string {
		return PadLeft(s, c, n)
	}
}
func PadRight(s, c string, n int) string {
	L := len(s)
	if L > n {
		return s
	}
	return s + strings.Repeat(c, n-L)
}
func PadRightF(c string, n int) func(string) string {
	return func(s string) string {
		return PadRight(s, c, n)
	}
}
func Pipe(s string, funcs ...func(string) string) string {
	for _, fn := range funcs {
		s = fn(s)
	}
	return s
}
func QuoteItems(arr []string) []string {
	return Map(arr, func(s string) string {
		return strconv.Quote(s)
	})
}
func ReplaceF(old, new string, n int) func(string) string {
	return func(s string) string {
		return strings.Replace(s, old, new, n)
	}
}
func ReplacePattern(s, pattern, repl string) string {
	r := regexp.MustCompile(pattern)
	return r.ReplaceAllString(s, repl)
}
func ReplacePatternF(pattern, repl string) func(string) string {
	return func(s string) string {
		return ReplacePattern(s, pattern, repl)
	}
}
func Reverse(s string) string {
	cs := make([]rune, utf8.RuneCountInString(s))
	i := len(cs)
	for _, c := range s {
		i--
		cs[i] = c
	}
	return string(cs)
}
func Right(s string, n int) string {
	if n < 0 {
		return Left(s, -n)
	}
	return Substr(s, len(s)-n, n)
}