fp ts 시작: 범주
6476 단어 typescriptfunctional
다음 글에서 우리는 함수식 프로그래밍을 더욱 재미있게 하는 고급 추상을 탐색할 것이다.
fp-ts에 포함된 첫 번째 고급 추상은
Functor
이다. 그러나 우리가 편지에 대해 토론하기 전에 우리는 유형에 관한 지식을 알아야 한다. 왜냐하면 편지는 유형 위에 세워져 있기 때문이다.함수식 프로그래밍의 초석은 조합이다.그러나 이것은 도대체 무엇을 의미하는가?언제 우리는 두 가지 일의 구성을 말할 수 있습니까?언제 우리는 모든 것이 좋다고 말할 수 있습니까?
우리는 구성에 관한 공식적인 정의가 필요하다.이것이 바로 분류의 의미이다.
Categories capture the essence of composition.
카테고리
카테고리의 정의가 약간 길기 때문에 나는 그 정의를 두 부분으로 나눌 것이다.
첫 부분(정의)
범주는
(Objects, Morphisms)
는 대상의 집합이다Objects
는 대상주의하다.이곳의'대상'이라는 단어는 OOP와 상관없이 대상을 검사할 수 없는 블랙박스, 심지어 변형된 어떤 보조 점위부호로 상상할 수 있다.
각 상태사
Morphisms
에는 하나의 원본 대상f
과 하나의 목표 대상A
이 있는데 그 중에서 B
과 A
이 B
에 있다.우리는
Objects
를 썼는데 우리는'f는 a에서 B까지의 태사'라고 말했다.섹션 2(구성)
"composition"이라는 동작
f: A ⟼ B
이 있기 때문에 아래 속성은 변하지 않아야 합니다.∘
과f: A ⟼ B
g: B ⟼ C
중의 두 개의 태사가 있을 때 Morphisms
중의 세 번째 태사g ∘ f: A ⟼ C
, 즉Morphisms
와f
의 합성이 반드시 존재해야 한다.g
,f: A ⟼ B
와g: B ⟼ C
라면h: C ⟼ D
h ∘ (g ∘ f) = (h ∘ g) ∘ f
(항등식)은 각 대상X
에 대해 identity: X ⟼ X
항등식의 태사X
가 존재하기 때문에 각 태사f: A ⟼ X
와 각 태사g: X ⟼ B
에 대해 우리는 identity ∘ f = f
와g ∘ identity
=g예.(출처: category on wikipedia.org)
이 유형은 세 개의 대상과 여섯 개의 상태사(1A, 1B, 1C는
A
, B
, C
의 항등상태사)만 매우 간단하다.프로그래밍 언어로서의 분류
카테고리는 다음과 같은 유형 프로그래밍 언어의 단순화 모델로 해석할 수 있습니다.
∘
는 자주 사용하는 함수 조합이다세 가지 유형과 작은 부분 함수만 있는 상당히 간단하고 볼품없는 프로그래밍 언어로 해석될 수 있다.
예를 들면 다음과 같습니다.
A = string
B = number
C = boolean
f = string => number
g = number => boolean
g ∘ f = string => boolean
function f(s: string): number {
return s.length
}
function g(n: number): boolean {
return n > 2
}
// h = g ∘ f
function h(s: string): boolean {
return g(f(s))
}
타자 스크립트의 종류
TS라는 범주를 TypeScript 언어의 모델로 정의할 수 있습니다. 여기서 다음을 수행합니다.
대상은 모든 종류의 스크립트 형식:
string
, number
, Array<string>
.상태는 모든 종류의 스크립트 함수입니다:
(a: A) => B
, (b: B) => C
.그중A
,B
,C
...유형 스크립트 유형신분 상태는 모두 다중 함수로 인코딩됩니다
const identity = <A>(a: A): A => a
상태의 합성은 일반적인 함수 합성(결합이다)
if
s가 없고 거의 아무것도 없다.그럼에도 불구하고 이 간소화 모델은 우리의 주요 목적에 있어 충분히 풍부하다. 좋은 구도 개념을 정의하는 이유에 대한 것이다.작문의 핵심 문제
TS에서 우리는 두 개의 통용 함수
f: (a: A) => B
와 g: (c: C) => D
를 구성할 수 있다. B = C
function compose<A, B, C>(g: (b: B) => C, f: (a: A) => B): (a: A) => C {
return a => g(f(a))
}
그런데 B != C
무슨 일이 일어났을까요?우리는 어떻게 이런 함수를 조합합니까?우리 포기해야 돼요?본문에서 우리는 어떤 조건하에서 이런 합성이 가능한지 보게 될 것이다.우리 편지에 대해 이야기합시다.
TLDR: 함수식 프로그래밍은 조합에 관한 것이다
Reference
이 문제에 관하여(fp ts 시작: 범주), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/gcanti/getting-started-with-fp-ts-category-4c9a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)