Skip to content

Latest commit

 

History

History
25 lines (16 loc) · 1.26 KB

semigroup-demo-concat.md

File metadata and controls

25 lines (16 loc) · 1.26 KB

문제

데모 01_retry.ts에 정의된 concat 결합자를 사용해 RetryPolicy 타입에 대한 Semigroup 인스턴스를 정의할 수 있을까요?

정답

네, 가능합니다. 세미그룹을 다음과 같이 정의해 보겠습니다.

import { Semigroup } from 'fp-ts/Semigroup'

const SemigroupRetryPolicy: Semigroup<RetryPolicy> = {
  concat: (first, second) => concat(first)(second)
}

모든 Semigroup 규칙을 준수합니다.

  • first, secondconcat의 결과는 모두 동일한 타입인 RetryPolicy입니다.

  • concat은 결합법칙을 만족합니다.

    3개의 RetryPolicy first, second, thirdstatus가 주어진다고 가정해봅시다.

    • RetryPolicy 중 하나라도 undefined를 반환하면 concat(concat(first, second), third)(status)concat(first, concat(second, third))(status) 모두 undefined가 됩니다.
    • 모든 RetryPolicy가 숫자를 반환하면 concat(concat(first, second), third)(status)Math.max(Math.max(delay1, delay2), delay3)concat(first, concat(second, third))(status)Math.max(delay1, Math.max(delay2, delay3))입니다. Math.max는 결합법칙을 만족하므로 결과는 delay1, delay2, delay3의 최대값이 됩니다.