There have been a couple of really nice blog posts about Tagless Final and some related topics. However, I have faced some design problems when writing some algebras and haven’t seen anybody talking about. So please let me introduce this problem to you. Algebra definition Given the following data definition: case class ItemName(value: String) extends AnyVal case class Item(name: ItemName, price: BigDecimal) Consider the following algebra: trait ItemRepository[F[_]] { def findAll: F[List[Ite...