private function ask($question, $default = null, $data = [])
    {
        // Initialise:
        
        $text = [];
        
        // Process Question:
        
        list($question, $type) = array_pad(explode(':', $question), 2, null);
        
        // Add Question:
        
        $text[] = $this->color(
            $question,
            $this->getConfig('fg-question')
        );
        
        // Add Type:
        
        if ($type) {
            
            $text[] = $this->color(
                sprintf($this->getConfig('format-type'), $type),
                $this->getConfig('fg-type')
            );
            
        }
        
        // Add Default:
        
        if ($default) {
            
            // Replace Tokens:
            
            $default = $this->replace($default, $data);
            
            // Add Default Text:
            
            $text[] = $this->color(
                sprintf($this->getConfig('format-default'), $default),
                $this->getConfig('fg-default')
            );
            
        }
        
        // Add Colon:
        
        $text[] = ': ';
        
        // Ask Question and Answer:
        
        if ($answer = $this->io()->ask(implode('', $text))) {
            return $answer;
        }
        
        // Answer Default:
        
        return $default;
    }