데이터를 포함하는 재귀 Dhall 합계 유형을 만드는 방법

통계 4224

다음은 내 예제 코드입니다. 나는 State합계 유형을 재귀 적 으로 만드는 방법을 알아낼 수 없었지만 여전히 다른 곳에서 합계 유형처럼 사용할 수 있도록 허용했습니다. StateMachine타입도 마찬가지입니다 .

let State =
      < Task : { Comment : Text, Resource : Text, End : Bool }
      | Map : { Comment : Text, Iterator : StateMachine }
      | Parallel : { Comment : Text, Branch : List State }
      >

let StateMachine
    : Type
    = { Comment : Optional Text
      , StartAt : Text
      , States : List { mapKey : Text, mapValue : State }
      }

let test
    : StateMachine
    = { Comment = Some "A simple minimal example"
      , StartAt = "Hello World"
      , States =
        [ { mapKey = "Hello World"
          , mapValue =
              State.Task { Type = "Task", Resource = "Test", End = True }
          }
        ]
      }

in  test

코드 크기를 늘리지 않고 최종 사용자가 가져오고 사용할 수 있도록 유형을 인체 공학적으로 만들지 않는 합리적인 방법이 있습니까? 예제에서 명확하지 않은 경우 상태 머신을 모드 화하려고합니다.

다음을 시도했지만 "Not a record or a Union"오류가 발생합니다 State.Task.

let State
    : Type
    =   ∀(_State : Type)
      → ∀(Task : { Type : Text, Resource : Text, End : Bool })
      → ∀(Map : { Type : Text, Iterator : _State })
      → _Stat
가브리엘 곤잘레스

첫째, 당신이 말하려는 유형은 다음과 같습니다.

let State
    : Type
    = ∀(State : Type) →
      ∀(Task : { Type : Text, Resource : Text, End : Bool } → State) →
      ∀(Map : { Type : Text, Iterator : State } → State) →
        State

in  State

질문에 답하기 위해 재귀 공용체 유형에 가장 가까운 것은 다음과 같은 표현입니다.

let State
    : Type
    = ∀(State : Type) →
      ( < Task : { Type : Text, Resource : Text, End : Bool }
        | Map : { Type : Text, Iterator : State }
        > →
          State
      ) →
        State

in  State

...하지만 무료로 공용체 생성자를 얻지 못할 것이므로 어쨌든 후자의 표현을 사용하지 않는 것이 좋습니다.

두 가지 방법 모두 생성자와 동일한 방식으로 작동하는 함수를 만들어야합니다. 비재 귀적 공용체 유형 에서처럼 언어가 생성하지 않습니다.

사용을 권장하는 표현이므로 첫 번째 유형에 대한 생성자를 작성하는 방법을 설명하겠습니다.

let Types =
      let Task = { Type : Text, Resource : Text, End : Bool }

      let Map = λ(State : Type) → { Type : Text, Iterator : State }

      let State
          : Type
          = ∀(State : Type) →
            ∀(Task : Task → State) →
            ∀(Map : Map State → State) →
              State

      in  { Task, Map, State }

let -- Record of constructors similar to what you would get from a union type
    State =
      let Task
          : Types.Task → Types.State
          = λ(x : Types.Task) →
            λ(State : Type) →
            λ(Task : Types.Task → State) →
            λ(Map : Types.Map State → State) →
              Task x

      let Map
          : Types.Map Types.State → Types.State
          = λ(x : Types.Map Types.State) →
            λ(State : Type) →
            λ(Task : Types.Task → State) →
            λ(Map : Types.Map State → State) →
              Map (x with Iterator = x.Iterator State Task Map)

      in  { Task, Map }

in  State.Map
      { Type = "Foo"
      , Iterator = State.Task { Type = "Bar", Resource = "CPU", End = False }
      }

자세한 내용은 다음을 참조하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

재귀 함수를 만드는 방법

분류에서Dev

Ember에서 재귀 계산 된 속성을 만드는 방법

분류에서Dev

Dhall Repl : 레코드 유형의 필드 유형을 가져 오는 방법

분류에서Dev

재귀 함수에서 합계를 얻는 방법

분류에서Dev

카운트를 포함하는 합계를 만드는 방법

분류에서Dev

재귀 데이터 유형으로 수동 유형 검사를 피하는 방법

분류에서Dev

재귀가있는 F # 합계 유형?

분류에서Dev

여러 파일 유형을 포함하기 위해 or 연산자를 사용하여 디렉토리의 모든 코드 행을 재귀 적으로 계산하는 방법

분류에서Dev

재귀 함수를 만들어 값 목록을 만드는 방법

분류에서Dev

합계 유형 또는 복사본을 사용하지 않고 이기종 데이터 유형 목록을 만드는 방법

분류에서Dev

Haskell에서 재귀 데이터 유형을 열거하는 방법은 무엇입니까?

분류에서Dev

다단계 사전 객체를 파일로 인쇄하는 재귀 함수를 만드는 방법

분류에서Dev

C에서 재귀 적 데이터 구조를 만드는 방법

분류에서Dev

재귀를 사용하여 이진 검색을 만드는 방법

분류에서Dev

이 코드를 재귀 형식으로 변경하는 방법

분류에서Dev

숫자 집합의 값을 더하는 방법을 계산하는 재귀 함수를 어떻게 작성합니까?

분류에서Dev

계열 데이터 포인트를 해결하는 방법은 유형 값을 지원하지 않습니까?

분류에서Dev

중첩 된 구독없이 다른 데이터 유형을 포함하는 여러 Mono / Flux를 결합 / 체인하는 방법

분류에서Dev

재귀를 사용하여 나선형 정사각형 행렬을 만드는 방법은 무엇입니까?

분류에서Dev

Python : 데이터 척을 만드는 방법은 매번 X 바이트를 포함합니다.

분류에서Dev

Kotlin에서 재귀 유형을 사용하는 방법

분류에서Dev

데이터 세트를 결합하는 여러 행을 만드는 방법

분류에서Dev

재귀 함수로 목록을 만드는 방법

분류에서Dev

스칼라에서 mapValues 재귀 함수를 만드는 방법

분류에서Dev

이 긴 재귀를 계산하는 방법

분류에서Dev

Python 사전에 SQLAlchemy 데이터 유형을 포함하는 방법

분류에서Dev

벡터를 만드는 재귀 적 방법

분류에서Dev

재귀만을 사용하여 파이썬에서 숫자 조합을 포함하는 목록 반환

분류에서Dev

자식을 포함하는 객체를 키-값 형식 객체로 재귀 적으로 파싱합니다.

Related 관련 기사

  1. 1

    재귀 함수를 만드는 방법

  2. 2

    Ember에서 재귀 계산 된 속성을 만드는 방법

  3. 3

    Dhall Repl : 레코드 유형의 필드 유형을 가져 오는 방법

  4. 4

    재귀 함수에서 합계를 얻는 방법

  5. 5

    카운트를 포함하는 합계를 만드는 방법

  6. 6

    재귀 데이터 유형으로 수동 유형 검사를 피하는 방법

  7. 7

    재귀가있는 F # 합계 유형?

  8. 8

    여러 파일 유형을 포함하기 위해 or 연산자를 사용하여 디렉토리의 모든 코드 행을 재귀 적으로 계산하는 방법

  9. 9

    재귀 함수를 만들어 값 목록을 만드는 방법

  10. 10

    합계 유형 또는 복사본을 사용하지 않고 이기종 데이터 유형 목록을 만드는 방법

  11. 11

    Haskell에서 재귀 데이터 유형을 열거하는 방법은 무엇입니까?

  12. 12

    다단계 사전 객체를 파일로 인쇄하는 재귀 함수를 만드는 방법

  13. 13

    C에서 재귀 적 데이터 구조를 만드는 방법

  14. 14

    재귀를 사용하여 이진 검색을 만드는 방법

  15. 15

    이 코드를 재귀 형식으로 변경하는 방법

  16. 16

    숫자 집합의 값을 더하는 방법을 계산하는 재귀 함수를 어떻게 작성합니까?

  17. 17

    계열 데이터 포인트를 해결하는 방법은 유형 값을 지원하지 않습니까?

  18. 18

    중첩 된 구독없이 다른 데이터 유형을 포함하는 여러 Mono / Flux를 결합 / 체인하는 방법

  19. 19

    재귀를 사용하여 나선형 정사각형 행렬을 만드는 방법은 무엇입니까?

  20. 20

    Python : 데이터 척을 만드는 방법은 매번 X 바이트를 포함합니다.

  21. 21

    Kotlin에서 재귀 유형을 사용하는 방법

  22. 22

    데이터 세트를 결합하는 여러 행을 만드는 방법

  23. 23

    재귀 함수로 목록을 만드는 방법

  24. 24

    스칼라에서 mapValues 재귀 함수를 만드는 방법

  25. 25

    이 긴 재귀를 계산하는 방법

  26. 26

    Python 사전에 SQLAlchemy 데이터 유형을 포함하는 방법

  27. 27

    벡터를 만드는 재귀 적 방법

  28. 28

    재귀만을 사용하여 파이썬에서 숫자 조합을 포함하는 목록 반환

  29. 29

    자식을 포함하는 객체를 키-값 형식 객체로 재귀 적으로 파싱합니다.

뜨겁다태그

보관