기능적인 디자인 패턴 [닫힌]


106

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


그것은 바로 당신의 질문에 대답하지 않고이 다른 질문 (링크 또는 두 개의 적어도) 몇 가지 흥미로운 정보가 있습니다 stackoverflow.com/questions/327955/...
르우벤

15
Typeclassopedia가 잘 다루지 않는다고 생각하는 영역을 확장 할 수 있습니까?
dave4420

2
@ dave4420 typeclassopedia를 처음부터 끝까지 읽으면 더 많이 읽을수록 덜 이해합니다. 첫 번째 섹션은 정말 좋지만 후반 섹션은 거의 읽을 수 없습니다.
Konstantin Solomatov 2012

3
@KonstantinSolomatov 이해하지 못하는 섹션을 조사하고 블로그 게시물을보고 코드를 자세히 살펴 봐야 할 수도 있습니다. typeclassopedia에있는 이러한 모든 "디자인 패턴"은 실제로 추상화이며, 때로는 깊이 들어가는 데 시간이 걸리는 경우가 많습니다.
jberryman 2012-07-05

1
@DanBurton은 내 의견을 잘못 읽었는지 확실하지 않지만 모든 것을 깊은 추상화로 분류 할 것입니다.하지만 "Ah ha!" 순간.
jberryman

답변:


35

내 제안은 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. 유형 시스템으로 효과 범위 지정

31

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

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

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

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


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

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

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


감사합니다. Monad, Arrow, Applicative no GoF 패턴과 같은 다른 종류의 패턴을 의미합니다.
Konstantin Solomatov

@KonstantinSolomatov : 죄송합니다. 질문을 오해했습니다. 모나드와 화살표에 대한 몇 가지 참조를 추가했습니다.
Riccardo T.

18

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

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



5

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

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

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

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

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


1
네, 책을 읽었습니다. 나는 그것을 매우 좋아했다. 불행히도 그것은 은밀한 화살과 다른 많은 고급 패턴을 다루지 않습니다. 또한 Monads 및 Applicatives에 대한 자세한 내용을 읽고 싶습니다 (예 : LYHGG는 연속 모나드를 다루지 않습니다).
Konstantin Solomatov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.