Monad

Kotlin の関数型プログラミング用ライブラリ Λrrow を試してみる

Kotlin で Scala の Scalaz や Cats のような関数型プログラミング用のライブラリを探していたところ、以下を見つけたので試してみました。 Λrrow 0.7.3 ソースは http://github.com/fits/try_samples/tree/master/blog/20180822/ はじめに Λrrow は以下のよ…

TypeScript で funfix を使用 - tsc, FuseBox

funfix は JavaScript, TypeScript, Flow の関数型プログラミング用ライブラリで、Fantasy Land や Static Land ※ に準拠し Scala の Option, Either, Try, Future 等と同等の型が用意されているようです。 ※ JavaScript 用に Monoid や Monad 等の代数的構…

FunctionalJava の DB モナド?

FunctionalJava における fj.control.db.DB クラスの使い方を調べてみました。 FunctionalJava 4.4 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20151013/ はじめに 処理内容を見る限り fj.control.db.DB は Reader モナドをベー…

Java のアノテーションプロセッサで Haskell の do 記法のようなものを簡易的に実現3

Java のアノテーションプロセッサを使って下記と同等の機能を実現する試みの第三弾です。 Haskell の do 記法 Scala の for 内包表記 F# のコンピュテーション式 前回 のものを改良し、ようやく下記のような構文を実現しました。 Optional<String> res = opt$do -> {</string>…

Java のアノテーションプロセッサで Haskell の do 記法のようなものを簡易的に実現2

前回 に引き続き、今回も Java のアノテーションプロセッサを使って下記と同等機能を実現します。 Haskell の do 記法 Scala の for 内包表記 F# のコンピュテーション式 今回は、F# のコンピュテーション式を模した下記のような構文 (前回断念したもの) …

Java のアノテーションプロセッサで Haskell の do 記法のようなものを簡易的に実現

「アノテーションプロセッサで AST 変換 - Lombok を参考にして変数の型をコンパイル時に変更」の応用編です。 前回は変数の型を var から java.lang.Object へ変更しただけでしたが、今回は下記と同等な機能の簡易版をアノテーションプロセッサで実現してみ…

成功するまで次を試すような処理へ Either モナドを適用 - FunctionalJava

成功するまで次の処理を試していくような処理に対して Either モナドを適用してみました。 使用した環境は下記の通りです。 Java SE 8u20 FunctionalJava 4.2 beta1 ソースは http://github.com/fits/try_samples/tree/master/blog/20140825/ はじめに Eithe…

Arrow (Kleisli) で List モナド - Haskell, Frege, Scalaz

「Scalaz でリストモナド - Kleisli による関数合成 」等で試してきた List モナドを使ったチェスのナイト移動の処理を Arrow (Kleisli) を使って実装し直してみました。 Arrow は計算のための汎用的なインターフェースで、モナドを扱うための Arrow とし…

Roy で List モナド

前回に続き、今回も Roy を試してみます。 Roy ではモナドを使った do 記法を使えるようなので、JavaScript で List モナド - Monadic 等で試したチェスのナイト移動の List モナド処理を同じように実装してみました。 Roy 0.2.2 ソースは http://github.com…

Functional Java で Iteratee - take の実装

Functional Java の Iteratee を使って、以前試した Play2 の Iteratee (http://fits.hatenablog.com/entry/20130212/1360681996, http://fits.hatenablog.com/entry/20130216/1361027691) や RxJava (http://fits.hatenablog.com/entry/20130310/1362876…

Play2 の Iteratee を使った行単位のファイル処理2 - Enumerator.generateM, Enumerator.fromCallback1

前回 id:fits:20130212 は Enumeratee.grouped() を使って行単位のファイル処理を実装しましたが、今回は Enumerator.generateM() と Enumerator.fromCallback1() をそれぞれ使って同様の処理を実装してみました。sbt のビルド定義ファイルなどは前回と同様…

Play2 の Iteratee を使った行単位のファイル処理1 - Enumeratee.grouped() の利用

id:fits:20130116 で使った Play2 の Iteratee を単体利用して行単位のファイル処理を実装してみました。 play-iteratees 2.1.0 Iteratee は Enumerator や Enumeratee と組み合わせて使用し、それぞれ以下のような役割を担います。 Enumerator : データを生…

JavaScript で List モナド - Monadic

Monadic は JavaScript 用のモナドライブラリです。今回はこの Monadic を使って、以前 (id:fits:20120912, id:fits:20120930) に Scalaz や Functional Java で実装したナイト移動の List モナド処理 *1 を JavaScirpt で実装してみました。 Monadic 0.0.…

Scalaz で Codensity モナド

Scalaz の Codensity を試してみました。Codensity モナドは継続モナドと基本的に同じですが、処理の型が以下のように異なっています。 継続モナドの場合 Codensityモナドの場合 (A => R) => R (A => F[B]) => F[B] つまり、Codensity は何らかのコンテナ(L…

Scalaz で継続モナド

以前(id:fits:20121104)、Haskell で実装した継続モナドのサンプルを Scalaz で実装してみました。なお、今のところ Scalaz に継続モナドは用意されていないようで、id:fits:20121111 のような方法で自作する必要がありました。ただし、実際のところ Scala…

Haskell と Scalaz でモナドを自作

今回は、Haskell と Scalaz でモナドを自作してみました。良い題材を思いつかなかったので、とりあえず以下のような単純なモナド(Counter モナドとする)を自作する事にしました。 カウンターを持たせて、バインドで処理を繋ぐ度にカウンター同士を加算する…

Haskell で継続モナド

継続渡し形式 (CPS) をモナドとして扱う継続モナドを Haskell で試してみました。 継続モナドは以下のような処理をモナド化します。 何らかの処理結果を引数として継続と呼ばれる関数を呼び出す(継続は外部から与える) 処理結果を引数にコールバック関数…

Scalaz で Reader モナドと Applicative

今回は関数をモナドとして扱う Reader モナドを Scalaz で使ってみます。 Scalaz 7.0.0-M3 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20121013/sbt 用ビルドファイルは以下の通りです。 build.sbt scalaVersion := "2.10.0-M7"…

Functional Java で List モナド - Groovy, Java 8 Lambda

id:fits:20120912 にて Scalaz で実装したナイト移動の List モナド処理を Functional Java を用いて Groovy と Java SE 8 Early Access with Lambda Support(b56) で実装してみました。使用した環境は以下の通り。 Functional Java 3.1 Groovy 2.0.4 Open…

Scalaz で Writer モナド

今回は、ログを追記する Writer モナドを Scalaz で使ってみます。 Scalaz 7.0.0-M3 sbt 0.12.0 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20120917/ 使用した sbt 用ビルドファイルは以下です。 build.sbt scalaVersion := "2…

Scalaz でリストモナド - Kleisli による関数合成

前回 id:fits:20120828 に引き続き、今回も書籍「 すごいHaskellたのしく学ぼう! 」 のサンプルを Scalaz で実装してみる事にします。今回は、リストモナドを使ったナイト移動 *1 の処理です。 Scalaz 7.0.0-M3 sbt 0.12.0 サンプルソースは http://github.c…

Scalaz で Ordering モノイド

書籍「 すごいHaskellたのしく学ぼう! 」 の Ordering モノイドを使った lengthCompare 関数を Scalaz で実装してみました。 Scalaz 7.0.0-M3 sbt 0.12.0 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20120828/ lengthCompare 関…