changeset 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 2a8bdd08eefd
children 309850f23a67
files slides/20140902/slide.md
diffstat 1 files changed, 73 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/slides/20140902/slide.md	Tue Sep 02 17:46:13 2014 +0900
@@ -0,0 +1,73 @@
+title: プログラムのデバッグ支援(仮)
+author: Yasutaka Higa
+cover:
+lang: Japanese
+
+
+
+# 研究目的(仮)
+
+* プログラミングにおいて、ソースコードを改変するとプログラムの挙動も変わる
+* しかしリファクタリングにおいてはソースコードを変更した後も同じ結果を得たい
+* ソースコードの改変をモナドとして記述し、実行結果の変化を自動的に検出したい
+* これによりリファクタリング支援や後方互換性の支援などを行なう
+
+
+# 業務連絡 + 近況報告
+* PS4 環境開発詳細? (from 長田先生)
+* Similar Monad
+    * as Functor
+    * as Monad (has Constraint)
+
+
+# Similar Monad
+* 似てるっぽい関数を記述して実行すると違う時に怒って欲しい
+* 値比較ができるのなら良いのですが
+* /Users/one/hg/Members/atton/similar_monad
+
+```
+data Similar a b = Similar a (a -> b) b
+data Similar a a = Similar a (a -> a) a
+```
+
+# Usage : Similar Monad
+```
+initObj = Similar 100 id 100
+
+initObj >>= \x -> Similar x f (g x) >>= ...
+```
+
+f と g の diff があったら >>= の時点で怒って欲しい
+
+
+# Similar Monad as Functor
+```
+data Similar a b = Similar a (a -> b) b
+instance Functor (Similar a) where
+  fmap g (Similar a f b) = Similar a (g . f) $ g b
+```
+
+* こんな感じなんだろうけれど Monad の return が定義できない
+    * (Similar a) の a を固定していないと Monad の instance にできない
+    * return :: a1 -> Similar a a1
+    * を想定されているが、 id なので Similar a a でおかしい
+
+# Sample : Similar Monad as Functor
+```
+similar :: (Show b, Eq b) => (a -> b) -> (a -> b) -> a -> b
+similar f g x = same $ Similar x g (f x)
+
+-- samples (revision 9)
+ok         = map (similar twicePlus double)  [1..10]
+notOk      = map (similar twicePlus plusTwo) [1..10]
+okSpecific = map (similar twicePlus plusTwo) [2]
+```
+
+# 謎
+* type variable が 1つだと
+    * Functor で移す先が Eq である保証が無くて怒られる
+* type variable が 2つだと
+    * return の型がー
+* とりあえず悩み中です
+
+<!-- vim: set filetype=markdown.slide: -->