fp ts 시작: 범주

6476 단어 typescriptfunctional
이전 글에서 우리는 함수식 프로그래밍에서 사용하는 몇 가지 기본적인 추상적인 것을 보았다.
다음 글에서 우리는 함수식 프로그래밍을 더욱 재미있게 하는 고급 추상을 탐색할 것이다.
fp-ts에 포함된 첫 번째 고급 추상은 Functor이다. 그러나 우리가 편지에 대해 토론하기 전에 우리는 유형에 관한 지식을 알아야 한다. 왜냐하면 편지는 유형 위에 세워져 있기 때문이다.
함수식 프로그래밍의 초석은 조합이다.그러나 이것은 도대체 무엇을 의미하는가?언제 우리는 두 가지 일의 구성을 말할 수 있습니까?언제 우리는 모든 것이 좋다고 말할 수 있습니까?
우리는 구성에 관한 공식적인 정의가 필요하다.이것이 바로 분류의 의미이다.

Categories capture the essence of composition.


카테고리


카테고리의 정의가 약간 길기 때문에 나는 그 정의를 두 부분으로 나눌 것이다.
  • 첫 번째는 기술적인 것이다
  • 두 번째 부분은 우리가 가장 흥미를 느끼는 내용: 구도의 개념
  • 을 포함할 것이다.

    첫 부분(정의)


    범주는
  • (Objects, Morphisms)는 대상의 집합이다
  • Objects는 대상
  • 사이의 상태사(또는 화살표)의 집합이다
    주의하다.이곳의'대상'이라는 단어는 OOP와 상관없이 대상을 검사할 수 없는 블랙박스, 심지어 변형된 어떤 보조 점위부호로 상상할 수 있다.
    각 상태사Morphisms에는 하나의 원본 대상f과 하나의 목표 대상A이 있는데 그 중에서 BAB에 있다.
    우리는 Objects를 썼는데 우리는'f는 a에서 B까지의 태사'라고 말했다.

    섹션 2(구성)


    "composition"이라는 동작f: A ⟼ B이 있기 때문에 아래 속성은 변하지 않아야 합니다.
  • (태사의 합성)f: A ⟼ Bg: B ⟼ C 중의 두 개의 태사가 있을 때 Morphisms 중의 세 번째 태사g ∘ f: A ⟼ C, 즉Morphismsf의 합성이 반드시 존재해야 한다.
  • (결합)g,f: A ⟼ Bg: B ⟼ C라면h: C ⟼ D
  • h ∘ (g ∘ f) = (h ∘ g) ∘ f(항등식)은 각 대상X에 대해 identity: X ⟼ X항등식의 태사X가 존재하기 때문에 각 태사f: A ⟼ X와 각 태사g: X ⟼ B에 대해 우리는 identity ∘ f = fg ∘ 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

  • 상태의 합성은 일반적인 함수 합성(결합이다)
  • TypeScript의 한 모델로서 TS는 너무 제한된 것 같다. 순환이 없고 ifs가 없고 거의 아무것도 없다.그럼에도 불구하고 이 간소화 모델은 우리의 주요 목적에 있어 충분히 풍부하다. 좋은 구도 개념을 정의하는 이유에 대한 것이다.

    작문의 핵심 문제


    TS에서 우리는 두 개의 통용 함수f: (a: A) => Bg: (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: 함수식 프로그래밍은 조합에 관한 것이다

    좋은 웹페이지 즐겨찾기