add Function1 trait