What are type projections useful for?

前端 未结 2 1940
心在旅途
心在旅途 2021-01-31 05:44

What are type projections in Scala useful for? Why does Scala\'s type system support both type projections and path dependent types? What was the rationale behind this design de

相关标签:
2条回答
  • 2021-01-31 05:55

    One thing type projections can be used for is partial type application:

    ({type λ[x]=Tuple2[Int,x]})#λ
    
    0 讨论(0)
  • 2021-01-31 06:08

    Not a complete answer, but here are some uses for type projections that I have encountered:

    • Type level metaprogramming. For examples, see Michid's series (parts I, II, III), Jesper's implementation of HList, and the series at Apocalisp.

    • A workaround to enable type inference (for examples, here are some previous SO questions 1, 2, 3).

    • A way to bundle a bunch of types into a single type parameter. For example, in a matrix library I'm developing, I define trait Scalar { type A; type B; type C; ... } and then pass it as a single parameter to my matrix trait, trait Matrix[S <: Scalar] ... The individual types can be referred to as S#A, S#B, and so on. Between two matrices of type Matrix[S], for the same S, these types will be compatible (unlike what would be the case with path dependent types).

    0 讨论(0)
提交回复
热议问题