일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 그라파나
- Golang
- 이더리움
- hyperledger fabric
- Actor
- Adapter 패턴
- 스칼라 동시성
- 스위프트
- 엔터프라이즈 블록체인
- 파이썬 강좌
- Play2 로 웹 개발
- 스칼라 강좌
- CORDA
- akka 강좌
- 주키퍼
- 플레이프레임워크
- 하이브리드앱
- Play2
- 하이퍼레저 패브릭
- 스칼라
- 안드로이드 웹뷰
- 파이썬 동시성
- play 강좌
- Hyperledger fabric gossip protocol
- Akka
- 파이썬
- 파이썬 머신러닝
- 파이썬 데이터분석
- 블록체인
- play2 강좌
- Today
- Total
HAMA 블로그
스칼라 강좌 (27) - 모나드 (Monad) 본문
- https://github.com/enshahar/BasicFPinScala/blob/master/Intermediate/Monad.md
- https://github.com/enshahar/BasicFPinScala/blob/master/Intermediate/Monad_Rules.md
- Monad Programming with Scala Future
- http://www.haruair.com/blog/2986
- http://blog.seulgi.kim/2015/07/what-is-monad.html
제 능력이 부족한 관계로 위의 글로써 대신합니다. (모나드 관련 한글 블로그 모음)
아참! 위의 글을 읽기 전에 반드시 모나드 괴담!을 읽어보세요. ^^
모나드가 무엇인지 이해함으로써 하스켈 프로그래머가 되겠다는 것은 "악기란 무엇인가?"를 이해하면 모든 악기의 연주자가 될 수 있으리라는 믿음과 같다. 즉 모나드를 이해하는것과 프로그래밍을 잘하는것과는 별개의 문제.
Fallacy (2015)
모나드 간단 정리
(코딩하다 보면 아 대략 이러면 모나드다 정도면 될 거 같습니다. 완벽한 모나드의 법칙을 이해 할 필요까지는 없을듯)
1.모나드는 다른 타입을 인자로 받는 타입이다.
case class Boxed[T](value:T);
2.모나드 타입의 값을 생성하는 함수가 있어야 한다.
def initBoxed(x:Int):Boxed[Int] = Boxed(x) def initLogged(x:Int):Logged[Int] = Logged(x, List()) def initMyOption(x:Int):MyOption[Int] = MySome(x)
3.다른 모나드 타입으로 진행하는 함수가 있어야 한다. (또한 감싼 값에 대해서 꺼낼 수 있는 방법을 제공하며 꺼낸 값을 가지고 원하는 형식으로 변형하고 다시 감싸서 반환)
session => Future[User]
=> flatMap => (User => Future[Order])
=> flatMap => (Order => Future[List[Item]])
위의 3가지 성질을 모두 가지고 있을때 모나드라 칭한다.
* 스칼라 Future 는 모나드가 아니다.=> https://stackoverflow.com/questions/27454798/is-future-in-scala-a-monad
아래의 자바스크립트의 예를 보면 대략 모두 가지고 있음을 알 수 있다.
// 타입 스크립트로 Monad의 인터페이스를 설계함
interface MStatic<T> {
// constructor that wraps value
new(value: T): M<T>;
}
interface M<T> {
// bind as an instance method
bind<U>(transform: (value: T) => M<U>): M<U>;
}
'Scala' 카테고리의 다른 글
스칼라 강좌 (29) - for comprehensions (0) | 2016.11.12 |
---|---|
스칼라 강좌 (28) - Currying(커링) (0) | 2016.11.08 |
스칼라 강좌 (26) - JSON 다루기 (0) | 2016.10.19 |
스칼라 강좌 (25) - 부분 함수 (Partial function) (0) | 2016.10.03 |
스칼라 강좌 (24) - 언더스코어 _ (0) | 2016.10.03 |