public static function decode(
        string $phrase,
        string $concatenationType = self::CONCATENATION_TYPE_ALL,
        string $glue = null
    ) {
        if ($concatenationType == self::CONCATENATION_TYPE_CAPITALIZATION ||
            $concatenationType == self::CONCATENATION_TYPE_ALL) {
            $phrase = preg_split('/(?=[A-Z])/', $phrase);
        } else {
            $phrase = [$phrase];
        }

        if ($concatenationType == self::CONCATENATION_TYPE_GLUE ||
            $concatenationType == self::CONCATENATION_TYPE_ALL) {
            $newWords = [];

            foreach ($phrase as $i) {
                array_push($newWords, ...self::unglue($i, $glue));
            }

            $phrase = $newWords;
        }

        $phrase = array_filter($phrase);

        foreach ($phrase as &$word) {
            $word = Dictionary::getInstance()->getWord($word);
        }

        return new self(...$phrase);
    }