2011年12月6日火曜日

Pure

Scalazはモナモナしたデータ構造が多いので早くMonadところまでやりたい・・・

ということで今日はPureを書きます。

Pure

Pureは"型パラメータを1つとる型"を型パラメータにとり、値を包み込む関数を持ちます。

分かりにくいので例を挙げます。


Pureを利用した関数では、計算をして結果を包むものが多いです。

pure

型を渡し、値をその型で包みます。


iterate, repeat, replicate

iterate, repeatは無限リストなんかを作る関数。
Stream以外に使えるものはあるのだろうか?

replicateはiterate, repeatと似ているけれど、大きさが決まっています。
これはListなどでも使えます。


+>:

値を包み込み、結合する演算子。
使い方がよくわからず、 List(1).+>:(1) とか書いてたけど : がついてるとレシーバが右にくるとの御指摘が。
演算子の結合順位もよくわかっていないのでコップ本を読み直さないとですね・・・


MA

今回の関数は +>: 以外Identityに定義されています。
+>: はどこに定義されているのかというと、MAに定義されています。

MAは"型パラメータを1つとる型"Mと型Aを型パラメータにとります。


Scalaではイレイジャで型M[A]の型Aが消えてしまうため、このような定義になっています。

このMAでは、"型パラメータを1つとる型"を対象にした型クラスを利用する関数が定義されています。

今後紹介する関数では、Identity,MAそしてMABで定義されたものを中心に紹介していきます。

これらはScalaz特有の関数を利用するための型クラスなので深い理解はいりませんが、Scalazを使う上で覚えておいて損はないでしょう。

1 件のコメント: