Your SlideShare is downloading. ×
OCamlの多相Variant紹介 #fpstudy
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

OCamlの多相Variant紹介 #fpstudy

3,794
views

Published on

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,794
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript

    • 1. 多相Variantの紹介 うさぎ組 in #fpstudy 2012/05/19
    • 2. Self Introduction名前:きょん(kyon_mm)Blog : うさぎ組Target : 開発環境改善Groovy、テスト、自動化、アジャイル、品質保証24歳うさみみ系男子SCMBootCamp、Nagoya.Testing、 StartupGroovy
    • 3. 今日発表する理由
    • 4. またもや@bleisさんと@mzpさんにはめられた件http://d.hatena.ne.jp/kyon_mm/20120421/1335018515
    • 5. ということで
    • 6. 多相Variant
    • 7. Variant
    • 8. 型安全なenumみたいな
    • 9. 値もてるけどな!
    • 10. Variant
    • 11. type irof1 = Osaka_irof of PG |Fukuoka_irof of PG;;
    • 12. type irof2 = Tokyo_irof of PG;;
    • 13. それぞれにパターンマッチ とか使えて便利!
    • 14. あー
    • 15. 全国のirof を対象にしたい
    • 16. つまり
    • 17. irof を統一したい
    • 18. 書いてみる
    • 19. type irof = Irof1 of irof1 | Irof2 of irof1;;
    • 20. あれ?
    • 21. Irof1 とか Irof2 とか
    • 22. ちょっと邪魔ですね
    • 23. そこで
    • 24. 多相Variantですよ!
    • 25. type irof1 = [`Osaka_irof of PG |`Fukuoka_irof of PG];;
    • 26. type irof2 = [`Tokyo_irof of PG];;
    • 27. 再度
    • 28. irofを統一したい!
    • 29. type irof = irof1 |irof2 ;;
    • 30. スッキリ!!!
    • 31. あれ?
    • 32. でも、こんなものが。。。
    • 33. #いろふさん目撃証言
    • 34. irofを追加したい!
    • 35. そこで!
    • 36. 多相Variantですよ!
    • 37. 確認
    • 38. 追加したいirof
    • 39. Okayama_irof Nara_irof Nagoya_irof
    • 40. 追加しよう
    • 41. type w_irof = [`Okayama_Irof! ! ! ! ! ! ! |`Nara_Irof! ! ! ! ! ! ! | irof1];;
    • 42. 簡単にirofさんを追加できます!!
    • 43. いまのは
    • 44. 要素を追加したけど
    • 45. クライアント側では
    • 46. もちろん静的に処理を追加 できるわけです
    • 47. ちょっと戻ると
    • 48. 多相
    • 49. Variantで型が被っていると コンストラクタで
    • 50. type A = [Foo| Num of int];;type B = [Bar | Num of int];;
    • 51. let func = function Num i -> i | _ -> failwith "Not Number";;
    • 52. このときにAとして使われる。。。
    • 53. でも、多相にしておけば 大丈夫!
    • 54. func を多相的に使えます。
    • 55. ほかに
    • 56. 多相Variantには3つある
    • 57. 開いている閉じている 固定
    • 58. 固定
    • 59. 固定 ->定義されているものと丁度合う
    • 60. 開いている
    • 61. 開いている ->少なくとも定義されているもの をもっている
    • 62. 閉じている
    • 63. 閉じている ->定義されているもののうちどれ かをもっている (定義以外はダメ)
    • 64. まぁいろいろ便利です。
    • 65. ご清聴ありがとうぴょん◆