Не можете присвоить экземпляр класса его типу протокола?

Пожалуйста, посмотрите самодостаточный пример ниже. Компилятор сообщает об ошибке в последней строке (отмеченоCOMPILE ERROR) где я назначаю экземплярSimpleTrain типу протокола, которому он (по моему мнению) соответствует. Как я могу сделать это скомпилировать? Что я делаю неправильно? Или это проблема с компилятором?

protocol Train {
    typealias CarriageType

    func addCarriage(carriage: CarriageType)
    func shortTrain<ShortType: Train where ShortType.CarriageType == CarriageType>() -> ShortType
}

class SimpleTrain<T> : Train {
    typealias CarriageType = T
    private var carriages: [T] = [T]()

    func addCarriage(carriage: T) {
       carriages.append(carriage)
    }

    func shortTrain<ShortType: Train where ShortType.CarriageType == CarriageType>() -> ShortType {
        let short = SimpleTrain<T>()
        short.addCarriage(carriages[0])
        return short //COMPILE ERROR: SimpleTrain<T> is not convertible to 'ShortType'
    }
}

РЕДАКТИРОВАТЬ: Даже когда я явно удручаюshortTrainвозвращаемый тип выше (так что последняя строка кода выше читаетreturn short as ShortType) какпредложенный Антонио все еще есть ошибка компиляции при вызове функцииshortTrain:

let s = SimpleTrain<String>()
s.addCarriage("Carriage 1")
s.addCarriage("Carriage 2")

let a = s.shortTrain() //ERROR: Cannot convert the expression's type '()' to type 'Train'
let b = s.shortTrain<SimpleTrain<String>>() //ERROR: cannot explicitly specialize a generic function

Ответы на вопрос(3)

Ваш ответ на вопрос