함수형 프로그래밍언어인 Scala의 최신버전인 Scala3(이지만 사실 나온지 2년 넘음)의 새 기능인 "Dependent function type" 의 예제인데

i2s 랑 s2i를 저 기능 이용해서 만든거.


이거 이해할 수 있겠냐?

이거 실제로 쓰라고 만든건가?


어떤 클래스의 변수를 클래스 생성과 동시에 지정해주는 건데,

24b0d121e09c28a8699fe8b115ef046b6e6b97

예전 Scala2까지는 Dependent value type 으로는 가능했는데 이걸 함수타입으로는 안되었었나봐.

def foo(bar:A): bar.B = bar.b

뭐 이런식으로는 가능했는데

위에는 메소드니깐 이걸 람다식으로 바꾸면

val fooF: (bar:A) => bar.B = foo

이런식으로는 언어의 한계인지 안되었나봄.


밑에 예제보면 이해하는데 도움될듯

24b0d121e09c28a8699fe8b115ef0468eaa2e9ba

trait이 java의 interface 같은거 거기에 타입제네릭 변수를 선언하고 그 타입으로 멤버변수 하나 선언

그리고 type DF 랑 IDF가 타입 정해주는건데 여기서는 함수를 타입으로 정해주고 해당 C타입의 종속된 타입인 M을 리턴해주는거

그리고 DF랑 IDF 변수에 함수값을 정의하고 그거 실행하면 해당 M타입을 가지는 변수값 출력하는거.




근데 응용 예제는 시발... ㅋㅋ

24b0d121e09c28a8699fe8b115ef046c63f9204699

기능 이해는 되는데 그냥 코딩 가독성이 씹창이라서... 실무에 사용 가능한지도 몰겄다. 어차피 실무코더들은 저런 개념들 많이 쓸 일 없을테니.


https://docs.scala-lang.org/scala3/reference/new-types/dependent-function-types-spec.html