JavaScriptでMonadを試した

最近、時間のあるときにすこしだけHaskellを触ったりもしていて、
Monadなるものに触れた。

そこで、それっぽいものをJavaScriptで試してみた。

確実に俄か感じではあるので、漠然としている理解であるけど。

Monad Laws

Monadと名乗るにはMonad則を満たさないといけない。
Monad則とは

  1. return x >>= f == f x
  2. m >>= return == m
  3. (m >>= f) >>= g == m >>= (\x -> f x >>= g)

mはMonadを指す。
(>>=) でMonadから値を取り出す。
return はMonadに値を渡す。

という認識でこの法則を読み取っている。
ということで、これを満たすことのできるclassを作成した。

create(returnと同じ感じ)でMonadをインスタンス化して、
bind(>>==と同じ感じ)でMonadに値を渡し、結果を得る。というシンプルなクラス。

Qunitを使ってMonad則をテストする

認識が正しければ、Monad則を満たしたので、Monadである。

いろいろなMonadを試してみる

Identity Monad

Maybe Monad

List Monad

ということで、JavaScriptでためしてデザインパターンという認識をした。

参考にしたページ
Monads in JavaScript
モナド則がちょっと分かった?
モナド: お前はもう知っている

Comments