ممنون از پاسختون
من خودم اینطور متوجه شدم که ما میایم یک نوع از طریق trait تعریف میکنیم بدون پیاده سازی پیش فرض و بعد چند تا کلاس داریم که این trait رو extend میکنند , و حالا اگر در function خواستیم یه پارامتر ورودی از این type داشته باشیم با implement متفاوت به مشکل نمی خوریم.