developer tip

기능적 디자인 패턴

optionbox 2020. 8. 10. 07:56
반응형

기능적 디자인 패턴


모나드, 응용, 화살표 등 많은 기능적 관용어가 있습니다. 그것들은 다른 기사에 문서화되어 있지만 불행히도 한 곳에서 요약 된 책이나 기사를 모릅니다 ( Typeclassopedia가 있지만 많이 있습니다 잘 다루지 않은 영역). 누구든지 한곳에서 잘 다루고 FP에서 중급 기술을 가진 프로그래머가 접근 할 수있는 기사 / 책을 추천 할 수 있습니까?


내 제안은 Scala를 배우고 싶다면 Paul Chiusano와 Runar Bjarnason의 책을 읽는 것입니다.

http://manning.com/bjarnason/

파트 II : 기능 설계 및 결합 자 라이브러리

  1. 작은 언어 만들기
  2. JSON 직렬화
  3. 사양 기반 테스트
  4. 파서
  5. 순전히 기능적인 병렬 처리
  6. 순전히 기능적 상태

파트 III : 기능적 디자인 패턴

  1. 추상화의 경우
  2. 모노 이드
  3. 펑터
  4. 모나드
  5. 실용적인 펑터
  6. 순회 및 접을 수있는 데이터 구조
  7. 코 모나드

파트 IV : 규칙 깨기 : 효과와 I / O

  1. 효과 대 부작용
  2. 스트림 처리 및 증분 I / O
  3. 유형 시스템으로 효과 범위 지정

이러한 모든 구성에 대한 다양한 사용법을 자세히 다루는 기사 나 책을 알지 못해서 미안하지만 개별 리소스에 대한 몇 가지 링크를 제공 할 수 있습니다.

매우 일반적인 패턴은 단순한 모나드 대신 모나드 변환기 를 만드는 것입니다 (다음 단락의 링크 참조). 이것은 기본적으로 다른 모나드와 결합되어야하는 무언가를 구축하여 두 모나드의 기능을 처리 할 수있는 더 복잡한 것을 의미합니다.

에서 실제 세계 하스켈 모나드에 대한 몇 장있다. 에서 제 14 장 모나드 저자는 기초 및 몇 가지 일반적인 용도 (아마, 목록, 상태)를 설명한다. 15 장. 모나드를 사용한 프로그래밍은 모나드 를 효과적으로 사용하는 방법에 대한 자세한 설명을 제공합니다 (독자 모나드도 다룹니다). 다음 장에서는 Parsec 사용 방법을 설명 하지만 실제로 작동하는 방법을 다루는 기사를 검색하는 것이 더 흥미로울 수 있습니다. 파싱을 위해 모나드를 잘 조직적으로 사용하는 좋은 예가되어야합니다. Fianlly, 18 장. 모나드 트랜스포머모나드 변환기의 작동 방식을 소개하고 단계별로 빌드하는 방법을 보여줍니다. 이 장의 마지막 섹션에 대한 고려 사항도 흥미 롭습니다.

나는 한때 모나드의 창조적 인 사용에 관한 정말 흥미로운 질문을 읽었습니다 . 제안 된 링크는 주제에 대한 멋진 읽기였습니다. 그런 정신으로 화살에 대해서도 똑같이 물어 보려고했습니다 . 모나드에있는 것보다 확실히 적은 답을 얻었지만 그럼에도 불구하고 흥미로운 것입니다.


4 인조 집단의 OOP 패턴과 관련하여 IBM의 Functional Think 시리즈 주제에 대한 멋진 3 개의 기사가 있습니다. 대상 기능 언어는 Scala입니다. 그들은 OOP의 일반적인 디자인 패턴을 설명하고 Scala에 매핑하는 방법을 보여줍니다.

  1. 기능적 사고 : 기능적 디자인 패턴, Part 1 . 여기에서는 공장, 템플릿 방법, 전략, 플라이 웨이트를 다룹니다. 결론은 함수를 일급 값으로 사용함으로써 모든 것이 훨씬 더 간단하다는 것입니다.
  2. 기능적 사고 : 기능적 디자인 패턴, Part 2 . 이것은 자바와 그루비 에 관한 것 입니다. 어댑터 패턴을 지정합니다.
  3. 기능적 사고 : 기능적 디자인 패턴, Part 3 . 여기서 그들은 인터프리터 패턴에 대해 이야기합니다. 다시 말하지만, 타겟 언어는 그루비입니다.

귀하의 질문에 가장 관련성이 높은 기사는 확실히 첫 번째 기사이지만 다른 두 기사는 그럼에도 불구하고 흥미로운 관련 기사 일 수 있습니다.


Jeremy Gibbons는 FP 블로그에 Patterns를 가지고 있는데, 이는 결국 당신이 요구하는 책이 될 운명입니다. 물론, 그것은 당신이 지금 당장 원하는만큼 유용 할 수있는 상태는 아니지만 그는 약간의 격려를받을 만합니다!

한편, Brent Yorgey의 Typeclassopedia에 +1이라고 말하겠습니다. 정말 유용하며, 나중에 혼란스러운 부분이 있다면이 사이트는 그 부분에 대해 알아볼 수있는 좋은 장소입니다. 브렌트가 계속 검토 중이라는 것을 알고 있습니다. 그가 독자들에게 다가 가지 않으면 도움을주세요.


많은 FP 관련 자료가 Oleg의 사이트에 게시됩니다. http://okmij.org/ftp/

Josh Suereth의 FP 패턴에 대한 프레젠테이션 : http://jsuereth.com/intro-to-fp/


Learn You a Haskell for Great Good 의 이후 장을 읽었 습니까?

  • 6 장에서는 기능 언어에서 더 중요한 두 가지 "디자인 패턴"인 맵과 접기에 대해 다룹니다.

  • 11-13 장은 Functor, Applicative Functor 및 Monads를 순서대로 다룹니다. 이것은 도움이됩니다. 많은 튜토리얼에서 Functor와 모나드를 소개 한 다음 마지막에 Applicative Functor를 붙입니다 (아무리 다루더라도). LYAH의 순서는 더 낫습니다. Functors => Applicative Functors => Monads에서 이동하면 점차 일반 성과 권력의 사다리를 올라갑니다.

  • 14 장에서는 Zippers를 다룹니다. 특정 데이터에 대한 포인터가있는 컨테이너 클래스라고 효과적으로 생각할 수 있습니다. 즉, 포인터 위치에서 O (1) 액세스 및 업데이트를 얻을 수 있습니다.

Haskell의 고급 주제 인 Arrows 또는 Comonads는 다루지 않습니다. Arrows 또는 Comonads를 사용하는 방법과 이유를 이해하려면 이미 Monads에 대해 확실히 알고 있어야하므로 이것이 문제가되지 않는다고 생각합니다. LYAH는 Haskell 시장의 초보자를 겨냥하고 있습니다.

참고 URL : https://stackoverflow.com/questions/11339637/functional-design-patterns

반응형