# HG changeset patch # User Yasutaka Higa # Date 1409647573 -32400 # Node ID ecb53fc23f6f73e02d2933a7d80ae860621bf919 # Parent 2a8bdd08eefd9bdcbd01bce59ec3adc1c6b643e7 Add slide for seminar diff -r 2a8bdd08eefd -r ecb53fc23f6f slides/20140902/slide.md --- /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 の型がー +* とりあえず悩み中です + +