#class (Monad m) => MonadSupply s m | m -> s where ....
#このクラスの定義における | m -> s の部分
#これをRWHではFunctional dependenciesと呼んでいるのだけど
#何ていうの>日本語
#functional => 汎関数
#dependency => 依存関係
#両方一緒になった用語って聞いたことない
#ときにfundepとも呼ばれるものらしい
#これもreguler expressionをときどきregexpと呼ぶことがあるってのと同様
#別の訳が存在しなかったりして。。。
#こまったちゃん
#とりあえずmからsが一意に決まるという依存関係を加えるものなのね
#依存型、かなあ FunctionalDepencencies
#FunDeps といえば「Type Class は型の集合だ、Multi Pramaters Type Class は型のデータベースだ。FunDeps はそのデータベースの主キーを決める」みたいな話がわかりやすくてすごく腑に落ちた記憶があるけど
#どこで聞いたんだっけなー
#関数従属性です。データベースの用語から取られたので。
##フォローありです > shelarcy
#> Functional Dependencies
#どういたしまして。
#不安になって依存型でぐぐったらなんか違う気がして焦ってたとこでした
#サンキュー!>nwn,shelarcy
#腹へった
#飯行ってくるか
#ふと思ったこと: 特定の型を持つ関数を定義することを禁止することはできる?
#例えば、IO a -> a みたいな型を持つ関数を定義しようとしたらエラーになったり
#特定のモナド変換子の中で liftIO しようとしたら型推論の途中でエラーになったり
#できないかなー
#GADT 使えばいいのかなー、でもそのためだけに GADT 使うのはめどい時もあるかもしれないし
#「Type Class は型の集合だ、Multi Pramaters Type Class は型のデータベースだ。FunDeps はそのデータベースの主キーを決める」みたいな話 たぶんこれ: http://video.google.com/videoplay?docid=-4399280499170944001 ##QuickCheck ってこういう風に使うんやでーこういう風に動いとるんやでーというのを実演してくれてる
#あと Haskell 知らない人向けに話してるみたいで、purity とか side effects とかの話もけっこうしてくれてる
#机の上に座りながら
#そういえば GADT はこういう型になります!これ以外の型にはなりません! は言えるけど(GeneralizedNewtypeDerivingを無視すれば)、この型だけには絶対になりません! は言えないのか
##画面が俺の発言だけで埋まったので自重
#↑そんなこと気にしなくていいと思いますよ。情報がたくさんあるほうが楽しいじゃないですか > nwn
#そう?ぼちぼちやります
#Chaton 日本時間で表示できないですか。
#基本的このサービスを受けている側が設定を変更できるようになっていないとおもいます。
#Chaton ときどき重くて「Javascriptの処理に時間がかかりすぎています。続行しますか?」とかでることがあるんだけどなんでだろ。
#今日は非常に軽い。
#どう書く.org でも「時間がかかる云々」がしばしば出る。
#使ってるブラウザは Bon Echo
#Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.8.1.20)
#Gecko/20081223 Vine/2.0.0.20-1vl4 Firefox/2.0.0.20
#しぶいなー
#メモリリーク?
#SmileyHackathon#5 というのあるのか。知らなかった。
##Haskell Hackathon したい。
#Hackathon よくわかんないけど http://okmij.org/ftp/ を読む会みたいなのがあったら行きたい #結合則のなりたたないモナドできたかも。
#
#bind [] _ = []
bind [x] k = k x
bind xs@(x:_) k = case k x of
[_] -> xs >>= k
otherwise -> drop 1 $ xs >>= k
data MyList a = My { unMy :: [a] } deriving (Show,Eq)
instance Monad MyList where
return x = My [x]
(My xs) >>= k = My $ xs `bind` (unMy.k)
m = My [1,2]
f x = My [x,x+1]
check = [(m >>= return) == m, (return 2 >>= f) == f 2, ((m >>= f) >>= f) == (m >>= (\x -> f x >>= f))]
#チェックよろ。
#