#ifempty
を enum
の内側で展開するのはなんかいろいろルール違反を感じるのでenum CurryHelper<variadic T, Result> {} extension CurryHelper where #empty(T) { typealias Fn = Result } extension CurryHelper where #notEmpty(T) { typealias Fn = (#head(T)) -> CurryHelper<#tail(T), Result: Result>.Fn }