- 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 |