func NormalizeString(s string) string {
	return norm.NFC.String(s)
}
NormalizeString applies the same normalization that cty applies when
constructing string values.

A return value from this function can be meaningfully compared byte-for-byte
with a Value.AsString result.
package cty
import (
	"fmt"
	"math/big"
	"reflect"
	"golang.org/x/text/unicode/norm"
	"github.com/zclconf/go-cty/cty/set"
)
func BoolVal(v bool) Value {
	return Value{
		ty: Bool,
		v:  v,
	}
}
func NumberVal(v *big.Float) Value {
	return Value{
		ty: Number,
		v:  v,
	}
}
func ParseNumberVal(s string) (Value, error) {
	f, _, err := big.ParseFloat(s, 10, 512, big.ToNearestEven)
	if err != nil {
		return NilVal, fmt.Errorf("a number is required")
	}
	return NumberVal(f), nil
}
func MustParseNumberVal(s string) Value {
	ret, err := ParseNumberVal(s)
	if err != nil {
		panic(err)
	}
	return ret
}
func NumberIntVal(v int64) Value {
	return NumberVal(new(big.Float).SetInt64(v))
}
func NumberUIntVal(v uint64) Value {
	return NumberVal(new(big.Float).SetUint64(v))
}
func NumberFloatVal(v float64) Value {
	return NumberVal(new(big.Float).SetFloat64(v))
}
func StringVal(v string) Value {
	return Value{
		ty: String,
		v:  NormalizeString(v),
	}
}