19/10/19 10:16:08.33 QmPBAH4r.net
モナド警察現るw
モナド = bindableでもいいけどbindって何?ってなるだろ
flatmapはmapの続きで理解できるからbindって言葉よりも理解しやすい
Optional<T>を例にすると
mapはOptional<T> -> ( T -> U ) -> Optional<U>
Optional<T>とTをUに変換する関数を受け取ってOptional<U>を返す
flatmapはOptional<T> -> ( T -> Optional<U> ) -> Optional<U>
Optional<T>とTをOptional<U>に変換する関数を受け取ってOptional<U>を返す
mapの場合、受け取る関数が( T -> Optional<U> )だと結果がOptional<Optional<U>>になって二重に包まれる
flatmapはこういう二重に包まれた結果にならないようmapする機能とネストした型をflattenする機能が合体したもの
IOやStateには当てはまらないとかいう奴も居るけど
mapだとIO<IO<T>>になるところをflattenしてIO<T>にするのは同じ
flattenするルールが包みの種類によって違うだけ