Mercurial > hg > Members > atton > seminar_slides
comparison slides/20140902/slide.md @ 66:ecb53fc23f6f
Add slide for seminar
author | Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 02 Sep 2014 17:46:13 +0900 |
parents | |
children | 309850f23a67 |
comparison
equal
deleted
inserted
replaced
65:2a8bdd08eefd | 66:ecb53fc23f6f |
---|---|
1 title: プログラムのデバッグ支援(仮) | |
2 author: Yasutaka Higa | |
3 cover: | |
4 lang: Japanese | |
5 | |
6 | |
7 | |
8 # 研究目的(仮) | |
9 | |
10 * プログラミングにおいて、ソースコードを改変するとプログラムの挙動も変わる | |
11 * しかしリファクタリングにおいてはソースコードを変更した後も同じ結果を得たい | |
12 * ソースコードの改変をモナドとして記述し、実行結果の変化を自動的に検出したい | |
13 * これによりリファクタリング支援や後方互換性の支援などを行なう | |
14 | |
15 | |
16 # 業務連絡 + 近況報告 | |
17 * PS4 環境開発詳細? (from 長田先生) | |
18 * Similar Monad | |
19 * as Functor | |
20 * as Monad (has Constraint) | |
21 | |
22 | |
23 # Similar Monad | |
24 * 似てるっぽい関数を記述して実行すると違う時に怒って欲しい | |
25 * 値比較ができるのなら良いのですが | |
26 * /Users/one/hg/Members/atton/similar_monad | |
27 | |
28 ``` | |
29 data Similar a b = Similar a (a -> b) b | |
30 data Similar a a = Similar a (a -> a) a | |
31 ``` | |
32 | |
33 # Usage : Similar Monad | |
34 ``` | |
35 initObj = Similar 100 id 100 | |
36 | |
37 initObj >>= \x -> Similar x f (g x) >>= ... | |
38 ``` | |
39 | |
40 f と g の diff があったら >>= の時点で怒って欲しい | |
41 | |
42 | |
43 # Similar Monad as Functor | |
44 ``` | |
45 data Similar a b = Similar a (a -> b) b | |
46 instance Functor (Similar a) where | |
47 fmap g (Similar a f b) = Similar a (g . f) $ g b | |
48 ``` | |
49 | |
50 * こんな感じなんだろうけれど Monad の return が定義できない | |
51 * (Similar a) の a を固定していないと Monad の instance にできない | |
52 * return :: a1 -> Similar a a1 | |
53 * を想定されているが、 id なので Similar a a でおかしい | |
54 | |
55 # Sample : Similar Monad as Functor | |
56 ``` | |
57 similar :: (Show b, Eq b) => (a -> b) -> (a -> b) -> a -> b | |
58 similar f g x = same $ Similar x g (f x) | |
59 | |
60 -- samples (revision 9) | |
61 ok = map (similar twicePlus double) [1..10] | |
62 notOk = map (similar twicePlus plusTwo) [1..10] | |
63 okSpecific = map (similar twicePlus plusTwo) [2] | |
64 ``` | |
65 | |
66 # 謎 | |
67 * type variable が 1つだと | |
68 * Functor で移す先が Eq である保証が無くて怒られる | |
69 * type variable が 2つだと | |
70 * return の型がー | |
71 * とりあえず悩み中です | |
72 | |
73 <!-- vim: set filetype=markdown.slide: --> |