함수적 자료구조 - List (1)

Jason Kim·2020년 5월 4일
0

이 시리즈는 "스칼라로 배우는 함수형 프로그래밍"을 TypeScript로 실습한 내용을 정리하고 있습니다.

3. 함수적 자료구조

함수적 자료구조?

순수 함수만으로 조작되는 자료구조. 자료를 그 자리에서 변경하거나 부수 효과를 수행하는 일이 없어야 한다. 따라서 불변이 이다.

여분의 복사가 많이 일어나 비효율적이지 않나? 그렇지는 않다. 이유는 나중에.

typescript

sealed trait List[+A]
case object Nil extends List[Nothing]
case class Cons[+A](head: A, tail: List[A]) extends List[A]

를 typescript로 encoding 한다면

List<A>를 abstract class로 만들어서 Cons와 Nil이 extends 하거나,
https://github.com/calebharris/fp_book_club_ts/blob/master/code/libfpts/data_structures/list.ts#L24

Cons와 Nil을 각각 정의 한 후 type List<A> = Cons<A> | Nil 로 만들 수 있다.
https://gcanti.github.io/fp-ts/guides/purescript.html

양쪽 모두 패턴 매칭을 흉내내기 위해서는 _tag와 같은 type 판별자의 사용이 필요하다.

나는 fp-ts를 사용해서 구현해나갈 예정이다.
https://github.com/JsonKim/fpinscala-with-typescript/blob/master/src/datastructures/list.ts

타입 파라미터의 공변, 반공변

https://edykim.com/ko/post/what-is-coercion-and-anticommunism/
공변이란 X가 Y의 서브타입이라면, 모든 형식 X와 Y에 대해 List는 List의 하위 형식이다.

0개의 댓글