func MapUint64(f func(uint64) uint64, list []uint64) []uint64 {
	if f == nil {
		return []uint64{}
	}
	newList := make([]uint64, len(list))
	for i, v := range list {
		newList[i] = f(v)
	}
	return newList
}
MapUint64 applies the function(1st argument) on each item of the list and returns new list

Takes 2 inputs
1. Function - takes 1 input
2. List

Returns
New List.
Empty list if all arguments are nil or either one is nil

Example: Square each item in the list
MapUint64(squareInt, []uint64{1, 2, 3}) // Returns [1, 4, 9]

func squareInt(num uint64) uint64 {
return num * num
}
package fp
func MapInt(f func(int) int, list []int) []int {
	if f == nil {
		return []int{}
	}
	newList := make([]int, len(list))
	for i, v := range list {
		newList[i] = f(v)
	}
	return newList
}
func MapInt64(f func(int64) int64, list []int64) []int64 {
	if f == nil {
		return []int64{}
	}
	newList := make([]int64, len(list))
	for i, v := range list {
		newList[i] = f(v)
	}
	return newList
}
func MapInt32(f func(int32) int32, list []int32) []int32 {
	if f == nil {
		return []int32{}
	}
	newList := make([]int32, len(list))
	for i, v := range list {
		newList[i] = f(v)
	}
	return newList
}
func MapInt8(f func(int8) int8, list []int8) []int8 {
	if f == nil {
		return []int8{}
	}
	newList := make([]int8, len(list))
	for i, v := range list {
		newList[i] = f(v)
	}
	return newList
}
func MapInt16(f func(int16) int16, list []int16) []int16 {
	if f == nil {
		return []int16{}
	}
	newList := make([]int16, len(list))
	for i, v := range list {
		newList[i] = f(v)
	}
	return newList
}