카테고리 없음

[Haskell] 레코드 필드에 대한 불일치 유형

행복을전해요 2021. 1. 25. 14:08

이것은 실제로 정확합니다. 레코드 필드의 이름은 서로 다른 컨텍스트에서 서로 다른 두 가지를 의미합니다.

  1. 개별 필드에있는 값 유형의 함수입니다.
  2. 패턴 매칭 및 구성에 사용할 수있는 마법의 기록 필드

GHCi 함수가 의미하는 바를 말하고 있지만 문서는 생성 할 함수가 아니라 레코드 필드 자체에 대해 이야기하고 있습니다.

본질적으로이 장면 뒤에

data Foo = Foo {fooy :: Int}

생성 할 것이다

fooy :: Foo -> Int
fooy Foo{fooy=fooy} = fooy
-- Equivalently: fooy Foo{fooy=bar} = bar

이 함수 fooy는 코드에서 던지는 것이지만 문서는 레코드 선택기에 대해 이야기하고 있으며 Foo{fooy=...}코드 일부 에서 볼 수 있습니다.

-------------------

runStateT 필드 유형은 입니다 s -> m (a, s). runStateT 필드 접근 자 함수 의 유형은 입니다 StateT s m a -> s -> m (a, s).

더 간단한 예를 들어 보겠습니다.

data Foo = Bar {foo :: Int}
  • foo 필드 의 유형 (즉, Bar생성자 에 입력 할 수있는 값 유형 )은 Int.

  • foo 함수 유형은 입니다 Foo -> Int.

더 자세히 설명하려면 :

Bar {foo = 5}

5는 분명히 Int.

let x = foo (Bar 5) in ...

다음 fooBar 5유형 이있는에 적용됩니다 Foo. 그래서 fooa를 취하고 Foo우리에게 5를주는 것 Int입니다. 이것은 .

-------------------

필드 runStateT 레코드에 대한 유형이다 s -> m (a,s)그러나 (현장 접근) 기능 도 불리는이 runStateT유형 인 StateT s m a -> s -> m (a,s)은 (유형의 필드 값을 반환 즉 s -> m (a,s)(유형의 기록 예를 들어) StateT s m a)



출처
https://stackoverflow.com/questions/22019874