2013-05-01から1ヶ月間の記事一覧

ScalaのFunctionからJava8のラムダへのimplicit conversion作った

https://github.com/xuwei-k/Scala2Java8例は、README見てください。

java8のOptionalにモナドのためのメソッドがないことによる想像される未来

また、きしだだんのblogへのトラックバックすいません・・・Java8でのプログラムの構造を変えるOptional、ただしモナドではない http://download.java.net/jdk8/docs/api/java/util/Optional.html追記:このblog書いた意味がなくなる以下のような話が・・・!…

Bindという型クラスの存在意義

結論とは関係ない流れから解説 この前blog書いたExtendという型クラスに関する話↓ @xuwei_k extendはbindの双対ですが、bindという型クラスがHaskellに無いからじゃないでしょうか??対称性が取れなくなるみたいな理由かなと感じました。Semigroupoidへ移動…

SemiComonadもしくはExtendという、Comonadに関連するtypeclass

一言でいうと、Comonadからcopoint*1を除いたものです。 *1:またの名をextract

map も flatMap も yield も使わずに、ScalaのforをMonadのための構文として利用する方法

注意: 遊んでみただけなので実用的ではない*1だろうし、この仕組みをあえて使ってる例全く見たこと無いし、初心者は混乱するかもしれないのであまり真面目に見ないほうがいいかもしれません *1:ここから色々工夫しないと、pointの型書かないといけないとか、…

ScalazのEndo

@markhibberd さんの Endo の話がわかりやすかったので、勝手に日本語の説明をつけたスライドを作りました

Java8でFunctionalJava

FunctionalJavaには、F1.javaやF2.javaなど、メソッド1つだけのabstract classを変更すればFunctionalInterfaceになるものが大量にあるので、ちょっと試してみました。 以下にわかりやすい書き換え例を上げておきます。 思ったよりも結構ラムダの型推論が効…

HaskellのdoとScalaのfor式とEitherとMonadPlus

標題の通り、色々書きたいことあって長くなってわかりにくくなりそうですが、頑張って書いてみます。なお、(2.8や2.9でもほぼ同じだと思いますが)Scalaのversionは2.10.1です。Haskellはghc7.4.2です。

Scalazでモナドの合成

まず、話の前提として以下の記事とか読んでおいたほうがいいです。モナドは合成できない( Translated Tony Morris's "Monads do not compose") 合成できるモナド、モナドが合成できる時

Scala の REPL から、無理やり Java8 を使う

まだScala側がほとんど対応してなくて、本当に無理やりです。追記 新しい命令にある程度対応したみたい(?)で、REPLでちょっと試したら変なエラーでなくなってるので、ScalaのFunctionからJava8のFunctionへの暗黙変換定義すればJava8をとても手軽に試せるの…

java.util.stream.StreamのメソッドとScalaの対応

またJava8の話。 Scalaの場合、ListでもStream*1でもVectorでも同じメソッドあるので、あえてどのclassなのかは明示しません。基本はJavadoc読んで雑に調べただけで、ちゃんと全部実行して試したわけじゃないので、明らかに間違ってたら教えて下さい。http:/…

「モナドはメタファーではない」に関する補足

日本語訳 モナドはメタファーではない 原文 Monads Are Not Metaphors原文が書かれたのはもう2年半くらい前ですが、いまだにたまにtweetされてたり、250くらいはてブがついてたり人気ありますね。で、説明中ででてくるコード例に関する補足というか、野暮な…

java.util.function.ToIntFunctionは、なぜjava.util.function.Functionを継承していないのか

Java8の話です。この記事Java8 の java.util.function package と Scala の対応表書いた後、java.util.functionパッケージ見て考えていると、ツッコミどころというか疑問点が大量にでてきて、どこからツッコめばいいのかよくわからないのだけれど、手始めに…

sbtがinvokeDynamicに対応してなくて、"Unknown constant: 18" っていわれる

sbt

java8*1 をダウンロードして、sbt0.12.3で以下のようなjavaファイルコンパイルしたら、エラーになった。*2 追記 sbt0.13系では、Scala2.10.xになったので、対応してる、はず *1: ここ から、 "8 Build b88" というversion *2:もちろんjdk8で直接javacすれば…

Java8 の java.util.function package と Scala の対応表

現状*1 java.util.function packageには43個interfaceがあるようです。http://download.java.net/jdk8/docs/api/java/util/function/package-summary.html *1:もう仕様が完全に固まったのか、まだ変更ありえるのか?というような事情知らない

highj・・・Java8による本当の関数型プログラミング?

最近以下のようなJava8の記事Java 8を関数型っぽく使うためのおまじないをちょくちょく見かけるようになったので、自分もなにか書こうと思い、前からちょっとだけ気になっていた、highjというライブラリhttps://code.google.com/p/highj/ https://github.com…