Я реализую базовый Functor
// class Functor f where
public protocol Functor {
typealias A
typealias B
typealias FB
// fmap :: (a -> b) -> f a -> f b
func fmap(f: A -> B) -> FB
}
public struct Box<X> {
let value: X
public init(value v: X) {
value = v
}
}
extension Box : Functor {
public typealias A = X
public typealias B = Any
public typealias FB = Box<B>
public func fmap(f: A -> B) -> FB {
return FB(value: f(value))
}
}
Если я не объявлю public typealias
, появится всплывающая ошибка
Псевдоним типа должен быть объявлен общедоступным, поскольку он соответствует требованию общедоступного протокола.
Это сообщение не дает большой подсказки, зачем оно должно быть публичным?