이 시리즈는 "스칼라로 배우는 함수형 프로그래밍"을 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의 하위 형식이다.