IFunction[T] as factory