public static function compare($left, $right)
    {
        if (self::isContainer($left) && self::isContainer($right)) {
            $leftFields  = self::normalize($left);
            $rightFields = self::normalize($right);

            if (count($leftFields) !== count($rightFields)) {
                return false;
            }

            foreach ($leftFields as $key => $value) {
                if (isset($rightFields[$key])) {
                    if (!self::compare($value, $rightFields[$key])) {
                        return false;
                    }
                } else {
                    return false;
                }
            }

            return true;
        } else {
            return $left === $right;
        }
    }