RemixRescriptPurescriptnpmCloudflareReactNext.jsGOHyper-VTiberoGitAlgorithms, 2020년

퓨어스크립트 북 챕터6 가볍게 읽어보는 메모장

March 4, 2022

퓨어스크립트 북 챕터6 - Type Classes

가볍게 읽어보기!

Project Setup

  • Maybe
    • optional values
  • Tuple
    • pairs of values
  • Either
    • disjoint unions
    • https://en.wikipedia.org/wiki/Disjoint_union
    • 분리합집합
    • 교집합이 존재하지 않는 둘 이상의 집합
  • String
  • Function

Show Me!

  • 타입 클래스 정의
class Show a where
  show :: a -> String
  • Orphan Instances
    • 고아 인스턴스?
    • 외부에 정의된 타입 클래스 인스턴스를 칭함
    • 퓨어스크립트에선 이를 금지
    • 인스턴스의 전역 고유성이 보장된다.
    • 얼마 전에 rescript에서 두 개의 모듈이 이름 겹쳐서 에러났는데 그런 비슷한건가..?

Common Type Classes

  • Eq : ==
  • Ord : 두 값 비교
  • Field : 숫자 연산
    • 슈퍼 클래스로 구성
  • Semigroups : 두 값 결합
  • <> 연결 연산자 append
  • Monoids : mempty 라고 불리는 빈 값 컨셉으로 Semigroups 을 확장?
    • 문자열과 배열은 모노이드의 간단한 예
  • foldable : fold 의 소스로 사용할 수 있는 유형 생성자

Type Class Constraints

  • 함수의 타입은 타입 클래스를 사용하여 제한할 수 있음
  • => : 제약 조건 지정

Instance Dependencies

  • 타입 클래스 인스턴스가 다른 타입 클래스 인스턴스에 의존 가능
instance showEither :: (Show a, Show b) => Show (Either a b) where
  ...

Multi Parameter Type Classes

  • 타입 클래스는 0개 이상의 매개변수를 가질 수 있음

Functional Dependencies

  • 다중 매개변수를 가지면 타입 유추에 문제가 생길 수 도 있음
  • 타입 클래스 정의에 힌트를 추가해 컴파일러를 돕자
  • Functional Dependency라고 함
class Stream stream element | stream -> element where
  uncons :: stream -> Maybe { head :: element, tail :: stream }

Nullary Type Classes

  • 인자가 0개인 타입 클래스는 assertions

Superclasses

  • 상속의 개념?