annotate slides/20140902/slide.md @ 67:309850f23a67

Update slide
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Tue, 02 Sep 2014 18:03:18 +0900
parents ecb53fc23f6f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
66
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 title: プログラムのデバッグ支援(仮)
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 author: Yasutaka Higa
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 cover:
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 lang: Japanese
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 # 研究目的(仮)
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 * プログラミングにおいて、ソースコードを改変するとプログラムの挙動も変わる
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 * しかしリファクタリングにおいてはソースコードを変更した後も同じ結果を得たい
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 * ソースコードの改変をモナドとして記述し、実行結果の変化を自動的に検出したい
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 * これによりリファクタリング支援や後方互換性の支援などを行なう
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 # 業務連絡 + 近況報告
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 * PS4 環境開発詳細? (from 長田先生)
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 * Similar Monad
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 * as Functor
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 * as Monad (has Constraint)
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 # Similar Monad
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 * 似てるっぽい関数を記述して実行すると違う時に怒って欲しい
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 * 値比較ができるのなら良いのですが
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 * /Users/one/hg/Members/atton/similar_monad
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 ```
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 data Similar a b = Similar a (a -> b) b
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 data Similar a a = Similar a (a -> a) a
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 ```
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
67
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
33 * 型変数をどう扱うかで悩み中です
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
34
66
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 # Usage : Similar Monad
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 ```
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 initObj = Similar 100 id 100
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 initObj >>= \x -> Similar x f (g x) >>= ...
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 ```
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 f と g の diff があったら >>= の時点で怒って欲しい
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 # Similar Monad as Functor
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 ```
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 data Similar a b = Similar a (a -> b) b
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 instance Functor (Similar a) where
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 fmap g (Similar a f b) = Similar a (g . f) $ g b
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 ```
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51
67
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
52 * 型変数が2つだと Functor の定義は楽
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
53
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
54 # Similar Monad as Functor
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
55 ```
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
56 instance Monad (Similar a) where
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
57 return x = Similar x id x -- NG
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
58 s >>= f = mu (eqmap f s)
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
59 ```
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
60 * 型変数が2つだと Monad の return が定義できない
66
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 * (Similar a) の a を固定していないと Monad の instance にできない
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 * return :: a1 -> Similar a a1
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 * を想定されているが、 id なので Similar a a でおかしい
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64
67
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
65 # Sample : Similar Monad as Functor (revision 9)
66
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 ```
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 similar :: (Show b, Eq b) => (a -> b) -> (a -> b) -> a -> b
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 similar f g x = same $ Similar x g (f x)
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
67
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
70 -- samples
66
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 ok = map (similar twicePlus double) [1..10]
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 notOk = map (similar twicePlus plusTwo) [1..10]
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 okSpecific = map (similar twicePlus plusTwo) [2]
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 ```
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
67
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
76
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
77 # Similar Monad as Monad
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
78 ```
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
79 data Similar a b = Similar a (a -> b) b
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
80
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
81 instance EqMonad Similar where
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
82 return x = Similar x id x
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
83 s >>= f = mu (eqmap f s)
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
84 ```
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
85
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
86 * 型変数が1つなら Monad の定義はできる
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
87 * 通常の Functor だと (a -> b) の b に constraint をかけられない
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
88
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
89
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
90 # Similar Monad as Monad
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
91
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
92 ```
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
93 class EqFunctor f where
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
94 eqmap :: (Eq a, Eq b) => (a -> b) -> f a -> f b
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
95
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
96 instance EqFunctor Similar where
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
97 eqmap f s = Similar fs id fs
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
98 where fs = f $ same s
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
99 ```
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
100
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
101 * (a -> b) の b が Eq 保証された Functor Class を使えばどうにか
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
102
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
103 # Sample : Similar Monad as Monad (revision 11)
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
104 ```
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
105 same $ return 100 >>= (\x -> Similar x twicePlus $ double x)
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
106 200
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
107
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
108 same $ return 2 >>= (\x -> Similar x plusTwo $ double x)
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
109 4
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
110
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
111 same $ return 100 >>= (\x -> Similar x plusTwo $ double x)
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
112 *** Exception: Prelude.undefined
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
113 ```
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
114
309850f23a67 Update slide
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
115 # Problem
66
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 * type variable が 1つだと
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 * Functor で移す先が Eq である保証が無くて怒られる
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 * type variable が 2つだと
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 * return の型がー
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 * とりあえず悩み中です
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121
ecb53fc23f6f Add slide for seminar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 <!-- vim: set filetype=markdown.slide: -->