[SCALA] 무형의 냇 유형의 한계
SCALA무형의 냇 유형의 한계
볼품에, 냇 유형은 유형 수준에서 자연수를 인코딩하는 방법을 나타냅니다. 이것은 고정 된 크기 목록의 예를 들어 사용됩니다. 당신은 유형 수준, 예를 들어,에 계산을 할 수 있습니다 APPEND K 요소 목록에 대한 N 요소 목록과 N + K 요소를 가지고 컴파일 타임에 알려진 목록을 다시 얻을.
이 표현은 예를 들어, 많은 수의 표현 능력 1000000 또는 253, 또는이 원인은 스칼라 컴파일러는 포기하는 것인가?
해결법
-
==============================
1.나는 하나를 자신을 시도합니다. 나는 기꺼이 트래비스 브라운 또는 마일 사빈에서 더 나은 대답을 받아 들일 것입니다.
나는 하나를 자신을 시도합니다. 나는 기꺼이 트래비스 브라운 또는 마일 사빈에서 더 나은 대답을 받아 들일 것입니다.
냇은 현재 많은 수를 나타내는 데 사용할 수 없습니다
냇 중첩 shapeless.Succ [] 유형의 수에 대응 값의 현재 구현에서 :
scala> Nat(3) res10: shapeless.Succ[shapeless.Succ[shapeless.Succ[shapeless._0]]] = Succ()
수 백만을 나타내는 그래서, 당신은 확실히 스칼라 컴파일러를 날려 버릴 것입니다 깊은 1000000 개 수준을 중첩되는 형태를 가질 것이다. 전류 제한은 실험에서 400에 대해 것 같다, 합리적인 컴파일 회 아마 50 미만을 유지하기 위해 최선을 다 할 것이다.
그러나 당신이 그들에 계산을 할 싶지 않아 제공, 유형 수준에서 큰 정수 또는 다른 값을 인코딩하는 방법이있다. 당신은 내가 아는 사람들과 함께 할 수있는 유일한 것은 그들이 동일하거나하지 않은 경우 확인하는 것입니다. 아래를 참조하십시오.
scala> type OneMillion = Witness.`1000000`.T defined type alias OneMillion scala> type AlsoOneMillion = Witness.`1000000`.T defined type alias AlsoOneMillion scala> type OneMillionAndOne = Witness.`1000001`.T defined type alias OneMillionAndOne scala> implicitly[OneMillion =:= AlsoOneMillion] res0: =:=[OneMillion,AlsoOneMillion] = <function1> scala> implicitly[OneMillion =:= OneMillionAndOne] <console>:16: error: Cannot prove that OneMillion =:= OneMillionAndOne. implicitly[OneMillion =:= OneMillionAndOne] ^
이는 데 사용할 수 있습니다 예를 들어, [바이트] 어레이의 비트 연산을 수행 할 때 동일한 배열 크기를 적용.
-
==============================
2.무형의 NAT는 교회 인코딩을 사용하여 유형 수준에서 자연 번호를 암호화한다. 또 다른 방법은 비트의 입력 레벨 HList로 원주민을 대표하는 것이다.
무형의 NAT는 교회 인코딩을 사용하여 유형 수준에서 자연 번호를 암호화한다. 또 다른 방법은 비트의 입력 레벨 HList로 원주민을 대표하는 것이다.
볼품없는 스타일이 솔루션을 구현 밀도를 확인하십시오.
나는 한 동안 거기에 근무 한 적이없는, 그것은 무형의 뿌리를 필요로 여기에 '게으른 거기 scalac가 제공하지만, 개념이 고체 인 경우에 :)
from https://stackoverflow.com/questions/21296099/limits-of-nat-type-in-shapeless by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 왜 매개 변수 목록이없는 경우 클래스는 사용되지 않는? (0) | 2019.11.27 |
---|---|
[SCALA] 문자열 보간에 달러 기호를 탈출 (0) | 2019.11.27 |
[SCALA] LINQ에 얼마나 있는가? (0) | 2019.11.27 |
[SCALA] 어떻게 스칼라는 바이트 코드를 생성? ASM과 같은 몇 가지 라이브러리를 사용하거나 직접 바이너리 쓰기? (0) | 2019.11.27 |
[SCALA] 의 경우의 프로그램 무리에 스칼라 방법 (0) | 2019.11.27 |