Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Scalaz– とある型クラスのライブラリ-     水島 宏太     (@kmizu)
自己紹介
の前に
発表途中でも遠慮無く(突っ込んで/質問)ください
@kmizu http://twitter.com/kmizu          id:kmizushimahttp://d.hatena.ne.jp/kmizushima          他称 Scala Bot
去年まで大学院生(博士課程)
ブログで就活⇒今の会社に就職   運が良かった?
まだまだ新米
Scalaエヴァンジェリスト(笑)
Scalazについて話します
その前に
ちょっと待って
Scalazって何?
頭のおかしい(褒め言葉)凄い人たちが作ったライブラリ
型クラス(Type Classes)
純粋関数型データ構造(Pure Functional Data Structures)
最低限の依存関係(J2SE + Scala標準ライブラリ)
IntelliJ IDEA使って開発してる
なんだか難しそう?
コード例
☆って何だよ☆って
★って何だよ★って
数学記号ならわかる
何故☆★?
あちこちでUnicode文字を   使いまくり
向こうの人はどうやって入   力しているのか
それが知りたい
ここから真面目に紹介
Scalazhttp://code.google.com/p/scalaz/
Scalaの標準ライブラリに  無いあれこれを集めた    便利ライブラリ
パッケージ一覧scalaz ←自分が紹介scalaz.effect↑@halcat0x15aさんが紹介scalaz.concurrentscalaz.ioscalaz.http      ググってくださいscalaz.geoscalaz.sca...
scalazパッケージ
Scalazのコア
色々なtrait/class  の集まり
中心は
便利な型クラス & それを利用した  ライブラリ
純粋関数型データ構造 (不変データ構造)   ライブラリ
CategoryApplicative  Functor   Arrow   Kleisi   Monoid   Monad    ...
IOモナドまである# Scalaで必要なのか…?
どういうバックグラウンド   の人が作ったか    よくわかる
でも、この辺の用語は わからなくてもOK
便利なとこだけ使おう
基本的な命名規約とかコーディングルール
末尾にs        ↓implicit conversion  を提供するtrait
末尾にW         ↓ implicit conversionによって拡張するための型 PimpedType[T]を継承
わかりやすい例
scalaz.BooleanWscalaz.Booleans
Boolean型に便利?メソッドを追加
二つ揃って一人前
いいからコードを
import scalaz._    import Scalaz._       var i = 1 i < 3 ∧ i > 0     truei < 1 ∨ i == 1      true i == 1 when { i+= 1 } (i...
import scalaz._import Scalaz._
この二行だけで使える
他のをimportしなくていい
次
scalaz.Optionsscalaz.OptionW
Option型に便利?メソッドを追加
(ry
val i: Option[Int] = Some(100)val j: Option[Int] = Noneval k: Option[Double] = Some(50.0)val l: Option[Double] = Nonei.orZ...
次
scalaz.Listsscalaz.Listw
List型に便利?メソッドを追加
import scalaz._import Scalaz._val lst = List(1, 2, 3)lst.toNel    Some(NonEmptyList(1, 2, 3))lst.powerset    List(List(1, ...
NonEmptyList ?
その名の通り
空(Nil)でない事が保証さ     れているList   (のようなもの)
⇒ head, tail が必ず  成功する  reduceLeft,  reduceRightも同様型安全性にとって重要
ところで
型クラスの話はどこ?
それは皆様の心の中に
というわけではなく
既に使っています
val i: Option[Int] = Some(100)val j: Option[Int] = Noneval k: Option[Double] = Some(50.0)val l: Option[Double] = Nonei.orZ...
0相当の値(零元)を取得
型毎に「零」値は異なる
そもそも「零」が無い型も
どうやって「零」を取得?
というわけで
orZeroの定義を見る
Zero[A                               [A]):  def unary_~(implicit z: Zero[A]): A =        value getOrElse z.zero           ...
Zero[Z]
零元を取得するためだけの   trait(型クラス)
trait Zero[Z] { val zero: Z }
ちょーシンプル
でも重要
色々な型クラス
Zero  Equal LengthSemigroup   ...
最初出てきた
CategoryApplicative  Functor   Arrow   Kleisi   Monoid   Monad    ...
こいつらも型クラス
純粋関数型データ構造
要はimmutableな データ構造
scala.collection.immutableにあるようなの
immutableデータは効率が         悪い?
必ずしもそうではない
でもその話は置いておく
Scalazが提供する純粋関数型データ構造
ZipperFingerTree  + Rope
あんまり多く無い
標準コレクションが充実してるせい(たぶん)
Zipper
一言で言うと
純粋関数型イテレータ 要素更新もO(1)で  できるよ!
とりあえずコードを(ry
val list = List(1,2,3)val zipper = list.toZipper.get.tryNextval updated = zipper.insert(10).insert(20)updated.toStream.toL...
とりあえずコードを(ry
FingerTree
一言で言うと
cons, reverse, cdr: O(1) append, split: O(log n)     ※償却計算量
例は省略
他にも色々ある
でも時間が
というわけでひとまず終了
ご静聴ありがとうございました
質問タイム?
Scalaz
Scalaz
Scalaz
Upcoming SlideShare
Loading in …5
×

17

Share

Download to read offline

Scalaz

Download to read offline

An introduction to Sca

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Scalaz

  1. 1. Scalaz– とある型クラスのライブラリ- 水島 宏太 (@kmizu)
  2. 2. 自己紹介
  3. 3. の前に
  4. 4. 発表途中でも遠慮無く(突っ込んで/質問)ください
  5. 5. @kmizu http://twitter.com/kmizu id:kmizushimahttp://d.hatena.ne.jp/kmizushima 他称 Scala Bot
  6. 6. 去年まで大学院生(博士課程)
  7. 7. ブログで就活⇒今の会社に就職 運が良かった?
  8. 8. まだまだ新米
  9. 9. Scalaエヴァンジェリスト(笑)
  10. 10. Scalazについて話します
  11. 11. その前に
  12. 12. ちょっと待って
  13. 13. Scalazって何?
  14. 14. 頭のおかしい(褒め言葉)凄い人たちが作ったライブラリ
  15. 15. 型クラス(Type Classes)
  16. 16. 純粋関数型データ構造(Pure Functional Data Structures)
  17. 17. 最低限の依存関係(J2SE + Scala標準ライブラリ)
  18. 18. IntelliJ IDEA使って開発してる
  19. 19. なんだか難しそう?
  20. 20. コード例
  21. 21. ☆って何だよ☆って
  22. 22. ★って何だよ★って
  23. 23. 数学記号ならわかる
  24. 24. 何故☆★?
  25. 25. あちこちでUnicode文字を 使いまくり
  26. 26. 向こうの人はどうやって入 力しているのか
  27. 27. それが知りたい
  28. 28. ここから真面目に紹介
  29. 29. Scalazhttp://code.google.com/p/scalaz/
  30. 30. Scalaの標準ライブラリに 無いあれこれを集めた 便利ライブラリ
  31. 31. パッケージ一覧scalaz ←自分が紹介scalaz.effect↑@halcat0x15aさんが紹介scalaz.concurrentscalaz.ioscalaz.http ググってくださいscalaz.geoscalaz.scalacheck
  32. 32. scalazパッケージ
  33. 33. Scalazのコア
  34. 34. 色々なtrait/class の集まり
  35. 35. 中心は
  36. 36. 便利な型クラス & それを利用した ライブラリ
  37. 37. 純粋関数型データ構造 (不変データ構造) ライブラリ
  38. 38. CategoryApplicative Functor Arrow Kleisi Monoid Monad ...
  39. 39. IOモナドまである# Scalaで必要なのか…?
  40. 40. どういうバックグラウンド の人が作ったか よくわかる
  41. 41. でも、この辺の用語は わからなくてもOK
  42. 42. 便利なとこだけ使おう
  43. 43. 基本的な命名規約とかコーディングルール
  44. 44. 末尾にs ↓implicit conversion を提供するtrait
  45. 45. 末尾にW ↓ implicit conversionによって拡張するための型 PimpedType[T]を継承
  46. 46. わかりやすい例
  47. 47. scalaz.BooleanWscalaz.Booleans
  48. 48. Boolean型に便利?メソッドを追加
  49. 49. 二つ揃って一人前
  50. 50. いいからコードを
  51. 51. import scalaz._ import Scalaz._ var i = 1 i < 3 ∧ i > 0 truei < 1 ∨ i == 1 true i == 1 when { i+= 1 } (i < 3).guard[List](1)i != 2 unless { i+= 1 } ...
  52. 52. import scalaz._import Scalaz._
  53. 53. この二行だけで使える
  54. 54. 他のをimportしなくていい
  55. 55.
  56. 56. scalaz.Optionsscalaz.OptionW
  57. 57. Option型に便利?メソッドを追加
  58. 58. (ry
  59. 59. val i: Option[Int] = Some(100)val j: Option[Int] = Noneval k: Option[Double] = Some(50.0)val l: Option[Double] = Nonei.orZero 100j.orZero 0k.orZero 50.0l.orZero 0.0i.orEmpty[List] List(100)j.orEmpty[List] List()k.orEmpty[Vector] Vector(100)l.orEmpty[Vector] Vector()i | 200 100j | 200 200...
  60. 60.
  61. 61. scalaz.Listsscalaz.Listw
  62. 62. List型に便利?メソッドを追加
  63. 63. import scalaz._import Scalaz._val lst = List(1, 2, 3)lst.toNel Some(NonEmptyList(1, 2, 3))lst.powerset List(List(1, 2, 3), List(1, 2), ...)lst.filterM{x => Set(x < 3)} Set(List(1, 2))lst.filterM{x => Set(x < 2)} Set(List(1))lst.tails.toList List(List(1, 2, 3), ...,List())
  64. 64. NonEmptyList ?
  65. 65. その名の通り
  66. 66. 空(Nil)でない事が保証さ れているList (のようなもの)
  67. 67. ⇒ head, tail が必ず 成功する reduceLeft, reduceRightも同様型安全性にとって重要
  68. 68. ところで
  69. 69. 型クラスの話はどこ?
  70. 70. それは皆様の心の中に
  71. 71. というわけではなく
  72. 72. 既に使っています
  73. 73. val i: Option[Int] = Some(100)val j: Option[Int] = Noneval k: Option[Double] = Some(50.0)val l: Option[Double] = Nonei.orZero 100j.orZero 0k.orZero 50.0l.orZero 0.0i.orEmpty[List] List(100)j.orEmpty[List] List()k.orEmpty[Vector] Vector(100)l.orEmpty[Vector] Vector()i | 200 100j | 200 200...
  74. 74. 0相当の値(零元)を取得
  75. 75. 型毎に「零」値は異なる
  76. 76. そもそも「零」が無い型も
  77. 77. どうやって「零」を取得?
  78. 78. というわけで
  79. 79. orZeroの定義を見る
  80. 80. Zero[A [A]): def unary_~(implicit z: Zero[A]): A = value getOrElse z.zero Zero[A [A]):def orZero(implicit z: Zero[A]): A = ~this
  81. 81. Zero[Z]
  82. 82. 零元を取得するためだけの trait(型クラス)
  83. 83. trait Zero[Z] { val zero: Z }
  84. 84. ちょーシンプル
  85. 85. でも重要
  86. 86. 色々な型クラス
  87. 87. Zero Equal LengthSemigroup ...
  88. 88. 最初出てきた
  89. 89. CategoryApplicative Functor Arrow Kleisi Monoid Monad ...
  90. 90. こいつらも型クラス
  91. 91. 純粋関数型データ構造
  92. 92. 要はimmutableな データ構造
  93. 93. scala.collection.immutableにあるようなの
  94. 94. immutableデータは効率が 悪い?
  95. 95. 必ずしもそうではない
  96. 96. でもその話は置いておく
  97. 97. Scalazが提供する純粋関数型データ構造
  98. 98. ZipperFingerTree + Rope
  99. 99. あんまり多く無い
  100. 100. 標準コレクションが充実してるせい(たぶん)
  101. 101. Zipper
  102. 102. 一言で言うと
  103. 103. 純粋関数型イテレータ 要素更新もO(1)で できるよ!
  104. 104. とりあえずコードを(ry
  105. 105. val list = List(1,2,3)val zipper = list.toZipper.get.tryNextval updated = zipper.insert(10).insert(20)updated.toStream.toList // List(1,2,10,20,3)
  106. 106. とりあえずコードを(ry
  107. 107. FingerTree
  108. 108. 一言で言うと
  109. 109. cons, reverse, cdr: O(1) append, split: O(log n) ※償却計算量
  110. 110. 例は省略
  111. 111. 他にも色々ある
  112. 112. でも時間が
  113. 113. というわけでひとまず終了
  114. 114. ご静聴ありがとうございました
  115. 115. 質問タイム?
  • syunsukehayase

    Jun. 6, 2017
  • htks27

    Aug. 27, 2015
  • amaya_382

    Jul. 15, 2015
  • x1ichi

    Aug. 13, 2014
  • cimadai

    Jul. 15, 2014
  • tmhk_m

    Apr. 20, 2014
  • fokizaki

    Apr. 4, 2014
  • kuwaken

    Mar. 21, 2014
  • hirozumiishikawa

    Nov. 19, 2013
  • yanana

    Jan. 23, 2013
  • ironpeace

    Dec. 9, 2012
  • sma_so

    Aug. 31, 2012
  • disktnk

    Jun. 6, 2012
  • TokyoIncidents

    May. 27, 2012
  • scova0731

    Mar. 2, 2012
  • makotow

    Oct. 8, 2011
  • yutax77

    Sep. 4, 2011

An introduction to Sca

Views

Total views

8,643

On Slideshare

0

From embeds

0

Number of embeds

337

Actions

Downloads

41

Shares

0

Comments

0

Likes

17

×