タグ

scalazに関するEhrenのブックマーク (11)

  • Scala.js + Scalaz Concurrent Task

  • [scalaz]Task - 並列処理

    先日の「Reactive System Meetup in 西新宿」で「Scalaz-StreamによるFunctional Reactive Programming」のスライドを作るにあたってscalazのTaskについて調べなおしてみたのですが、Taskの実用性について再確認することができました。 色々と切り口がありますが、その中で並列性能が今回のテーマです。 準備準備として以下のものを用意します。 implicit val scheduler = new java.util.concurrent.ForkJoinPool(1000) def go[T](msg: String)(body: => T): Unit = { System.gc val ts = System.currentTimeMillis val r = body println(s"$msg(${System.c

  • [SDN]List性能問題

    懸案だったMonadic Programming、Functional Reactive Programmingもある程度目処がついてきたこともあり、要件定義で作成されたモデルを実装に落とし込むという流れの中での総合的なScalaプログラミングの方法論をScala Design Noteという切り口で考察していこうと思います。 大昔にJava World誌で「Java Design Note」という連載を書いていましたが、そのScala版をイメージしています。 Scalaを実務に使う場合に注意が必要なのがListの性能問題です。 Scalaでは関数型言語の伝統を踏襲してLispのList由来のListを基データ構造としています。システムの各種デフォルトもListを使う方向になっていますし、文法を説明する場合にもListを使用するケースが多いと思います。 Listは関数型プログラミングとの

  • Typelevel | How can we map a Set?

    Scalaz used to have a scalaz.Functor for scala.collection.Set but it was eventually removed because it relied on Any’s == method. You can read more about why Functor[Set] is a bad idea at Fake Theorems for Free. If Set had been truly parametric, we wouldn’t have been able to define a Functor in the first place. Luckily, a truly parametric Set has recently been added to Scalaz as scalaz.ISet, with

    Ehren
    Ehren 2015/03/26
  • Scalaz勉強会しました

    APPAREL CLOUDはアパレルウェブが提供しているアパレル向けのクラウドサービスです。ボクが所属するEverforthの提供するEverforthプラットフォーム上に構築されています。 Everforthプラットフォームは、O2Oやオムニチャネル向けのクラウド・プラットフォームです。Everforthプラットフォームでは、サービスを実行するクラウド実行基盤と同時にO2Oやオムニチャネル・ビジネスをサービスに結び付けるための業務分析、システム分析を包含したサービス開発体系の提供も予定しています。 「サービス開発体系」は、オブジェクト指向ビジネス・モデリング、オブジェクト指向分析設計の技術をベースに、Everforthプラットフォームをターゲットとしたアプリケーション開発の方法論として整備していく予定です。 一般的なオブジェクト指向分析設計方法論が複雑で分かりづらいものになっているのは、

    Ehren
    Ehren 2014/07/28
  • Either と scalaz.Validation - cooldaemonの備忘録

    下記で取り上げられているネタについてメモを残す。 Scala の Either についての考察 - scalaとか・・・ Scala勉強会第53回 (EitherやScalazのValidationについて) - Togetter Either と Scalaz Either は flatMap メソッドを持たないので for 式では使えない。for 式内で Right で処理を進めたいなら right メソッドで、Left で処理を進めたいなら left メソッドで *Projection を取得する必要がある。 def r(n: Int): Either[String, Int] = Right(n) for { x <- r(1).right; y <- r(x).right } yield x+y とはいえ、多くの場合 Right で処理を進めたい場合が多く、Left で処理を進め

    Either と scalaz.Validation - cooldaemonの備忘録
    Ehren
    Ehren 2012/11/22
    面白い。すげー面白い
  • Scalaz で Ordering モノイド - なんとなくな Developer のメモ

    書籍「 すごいHaskellたのしく学ぼう! 」 の Ordering モノイドを使った lengthCompare 関数を Scalaz で実装してみました。 Scalaz 7.0.0-M3 sbt 0.12.0 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20120828/ lengthCompare 関数は以下のように文字列を比較する前に文字列長を比較するというもので、文字列長が等しかった場合のみ (= EQ) 文字列の比較 (`mappend` の右辺) を実施します。(処理内容はのままです) Haskell版 length_compare.hs import Data.Monoid lengthCompare :: String -> String -> Ordering lengthCompare

    Scalaz で Ordering モノイド - なんとなくな Developer のメモ
    Ehren
    Ehren 2012/08/28
  • わたしのScalazプログラミング

    Scalaはオブジェクト指向言語なのですよ。 知ってました? 重要:これから書くコードはとてもメニアックなので参考にしないようにして下さい。 今日は有理数を定義してみます。 加算と減算を追加してみる。 さて、この2つのメソッド、とても似ていますよね。 抽象化してしまいます。 さて、今日の題はここからです。 この加算と減算を他の数値型に対応させたいとします。 普通はこのようにオーバーロードを使いますよね。 しかし、+や-はメソッド型ではなく、値型なのでオーバーロードは使用できません。 そこで、オーバーロードを使わず、UnionTypesを使って定義します。 これでもまだ問題があります。 Scalaでは、型パラメータをとる関数を値として定義できません。 そこで、関数のようにふるまう型を自分で定義します。 これで+と-の演算を抽象化し、さらに多相に対応しましたね。 めでたしめでたし。

    Ehren
    Ehren 2012/06/05
  • 比較はモノイド - akihiro4chawonの日記

    比較モナドについて考察されている一連のエントリに感銘を受けて、私も比較について考えてみました。 比較モナド - terazzoの日記 続・比較モナド - terazzoの日記 続・続・比較モナド〜復讐編〜 - terazzoの日記 まず、考察対象として「比較結果」と「比較操作」に分けて考えます。比較結果というのは、比較後に返ってくる値(例:Java の Comparator の compare における 負・零・正)を言います。比較操作というのは、比較する関数(あるいは関数オブジェクト)自体(例:Java の Compartor 自体)を言います。 比較結果モノイド 比較結果というのは、2つの比較対象に対して、その片方が他方よりも「小さいのか」「等しいのか」「大きいのか」を示す値です。例えば、Perl の 比較演算子 <=> や Java の Comparator において、左辺が小さいこ

    比較はモノイド - akihiro4chawonの日記
  • scalaz.StateT で scalaz.State と Option を組み合わせる - cooldaemonの備忘録

    scalaz の ExampleState に StateT のサンプルが無かったので試してみた。 気が向いたら、そもそも State モナドって何よ?という所から説明書くかも。 package com.github.cooldaemon.try_scalaz import scalaz._ object TryState { import Scalaz._ def run { def initO = stateT[Option, Int, Int]((s: Int) => if (s % 2 == 0) Some((s, s)) else None ) initO ! 1 assert_=== None initO ! 2 assert_=== Some(2) def putO(s: Int) = stateT[Option, Int, Unit](_ => if (s % 2 == 0

    scalaz.StateT で scalaz.State と Option を組み合わせる - cooldaemonの備忘録
  • Scalaz Tutorial: Enumeration-Based I/O with Iteratees

    NOTE: This content is being moved to the target of this link. Please update your bookmarks. Scalaz 5.0 adds an implementation of a concept called Iteratee. This is a highly flexible programming technique for writing enumeration-based input processors that can be freely composed. A lot of people have asked me to write a tutorial on how this works, specifically on how it is implemented in Scalaz and

    Scalaz Tutorial: Enumeration-Based I/O with Iteratees
  • 1