haskell-ja > Archives > 2009/07/06

2009/07/06 00:47:43 UTCcut-sea
#
おお
2009/07/06 01:09:45 UTCcut-sea
#
スゲー
#
確かに第一第二はpassする!
#
最後の結合則っぽいやつだけ除外すると>> +++ OK, passed 100 tests.
#
含めるとFailed! Falsifiable (after 5 tests and 2 shrinks)などなど
2009/07/06 01:22:39 UTCcut-sea
#
check = [True,True,False]
#
ぬぅ
2009/07/06 01:28:33 UTCcut-sea
#
bind :: [t] -> (t -> [a]) -> [a]
#
ってことはbindは普通のリストモナドのbindと同じだよね
#
型的には
2009/07/06 03:26:52 UTC[1..100]>>=pen
#
基本的にリストモナドのbindにさらにdrop 1してるだけです。ただそれだけだと第1第2にパスしないので bind [x] k = k x と case k x of [_] -> xs >>= k でごまかしてます。
2009/07/06 05:03:19 UTCcut-sea
#
ちょっと私もじっくり鑑賞してみようかな
#
おもしろそうだ
2009/07/06 06:39:17 UTCcut-sea
#
-XFlexibleInstancesって拡張は
#
flexibleなinsatnceをサポートする必要があるなら云々という説明があるのだが
#
flexibleなinstanceとは何ぞや?
2009/07/06 07:49:30 UTCikegami
#
http://www.haskell.org/ghc/docs/latest/html/users_guide/type-class-extensions.html#instance-rules
#
日本語に訳すのはめどいほど、なんか複雑な緩め方なので読んでちょ
2009/07/06 08:09:31 UTCnwn
#
今日は疲れたのでハスケルで遊びました: http://dibblego.wordpress.com/2008/09/18/20-intermediate-haskell-exercises/
#
なんとかぜんぶできた いい練習問題だと思う
#
あと関数の名前がおいしそう
2009/07/06 08:14:16 UTCikegami
#
おもしろい
#
どこ経由でみつけたの? (20問)
2009/07/06 08:14:47 UTCnwn
#
haskell-cafe です
#
あ、まちがえた haskell-biginners
#
http://www.haskell.org/pipermail/beginners/2009-July/001934.html
2009/07/06 08:16:38 UTCikegami
#
ありがと
#
こいつも購読するかな
#
しっかりわかってないけど、圏論の言葉に翻訳すると、Functor をいろんな圏でつくりましょうということになるのかな
#
fmap :: forall a b (f :: * -> *). (Functor f)=> (a->b) -> f a -> f b
2009/07/06 08:19:53 UTCnwn
#
うん、あと Monad
#
ネタバレになるかもしれないけど、banana の引数の順番まちがえまくった
#
Either(Left|Right) の意図がいまいち分からない。とりあえず型は合わせたけど。。。
#
問数稼ぎ?
2009/07/06 08:23:08 UTCikegami
#
djinn がどこまでがんばれるか試すのもおもしろそうだ(たぶんアホだから全然駄目
#
うーん、どうなんだろ : EitherLeft の意図
2009/07/06 08:24:27 UTCnwn
#
Theorem prover の testsuite にできるかもね
#
個人的には Either(Left|Right) を抜いて ichijiku :: (a -> b -> m b) -> b -> m [a] とか kiwi :: m (t a) -> t (m a) とか入れるかも
#
自分で解けるかわからないけどw
#
まちがえた: ichijiku :: (a -> b -> m b) -> b -> m [a] -> m b
2009/07/06 08:28:49 UTCikegami
#
functor の合成は functor にーとかいう議論は圏論得意で
#
知ってる人なら、「分割統治」してあっさりと解くのだろう
#
(point-free style で)
#
Haskell の言葉で言うと flip と (.) をうまくつかう
2009/07/06 08:30:32 UTCnwn
#
圏論得意じゃないからめっちゃ point-free じゃない方法で解いてた
2009/07/06 08:30:34 UTCikegami
#
そのふたつを糊にして、小さな関数を結合して答えを解く
2009/07/06 08:31:05 UTCnwn
#
point-free の反対ってどういうんですか?
2009/07/06 08:32:09 UTCikegami
#
lambdabot は un-point-free っていう名前をつかっていた
#
けど、pointwise のほうがよりよいとおもう
2009/07/06 08:32:40 UTCnwn
#
pointwise か。ありがとう
#
pointful ってタイプしてしばらく悩んでたw
2009/07/06 08:34:57 UTCikegami
#
Haskell にしろ数学にしろ、一番小さい単位は pointwise で書かないと定義できない
#
でも、圏論が主張するのは、パズルのピースを結合するのに point-free でできるよ、ということ
#
point-free で結合すると、計算機には優しくなる
2009/07/06 08:36:06 UTCnwn
#
ふむふむ
2009/07/06 08:36:16 UTCikegami
#
人間には可読性が激しく悪くなる
#
\x y -> A (y,x ) :=====: (A .) . flip (,)
#
同じ関数なんだけど、ふつう人間は左で書くよね
#
(nobsun のような変態をのぞく)
2009/07/06 08:38:13 UTCnwn
#
wwww
2009/07/06 08:39:17 UTCikegami
#
一方、右は、計算機にとっては、うれしい記述になってる
#
. と flip と , と型構築子 A を、実際の機械のコードにどう落とすか、さえわかればいいから
#
lambda 式より楽
#
(というか、Haskell 処理系は、ソースを、右のような point-free style になるようにできるだけ前処理しています)
2009/07/06 08:41:10 UTCnwn
#
そういうことか。動かすと速いって言う意味かと思った > 計算機に優しい
2009/07/06 08:41:38 UTCikegami
#
最適化がやさしくなるかどうかは微妙
2009/07/06 08:43:13 UTCnwn
#
でも機械のコードに落とすのは楽になる
2009/07/06 08:44:55 UTCikegami
#
そこらへんもびみょーで
#
カリー化すると、とたんに式が変わってしまうのだ
2009/07/06 08:46:02 UTCnwn
#
どういうこと?
2009/07/06 08:46:54 UTCikegami
#
\x y -> の式を y はずして ( -> ) の式にしたとすると
#
\x -> A (y, x) :=====: A. (,) y
#
で、Haskell プログラマは、よくこういうことする(最後の引数をはずして、より汎用な関数をつくる)
#
このケースをみると、ラムダ式はラムダ式のままとっといたほうがいいんじゃね? とも思える
2009/07/06 08:49:20 UTCnwn
#
カリー化したらこの場合は flip がなくなっちゃったってこと?
2009/07/06 08:49:29 UTCikegami
#
はい
2009/07/06 08:49:37 UTCnwn
#
なるほど
2009/07/06 08:50:03 UTCikegami
#
で、GHC は hybrid かつ富豪的な方法をとっていて
#
コンパイル時に両方確保している
#
最近出た論文で、この問題をどうしたらいいだろうかと、やり玉にあげていた。
2009/07/06 08:52:08 UTCnwn
#
どっちの方法がうまくいくかっていうのが、やるまでわからないのか
2009/07/06 08:52:30 UTCikegami
#
あと、GC もからむので、複雑な問題だ
#
論文の最後では、「提案した方法は実験してみないとわからないので、GHC-head でぐちゃぐちゃしてみます」と書いてあった
#
GHC 使う側としては、そういうことはやめてほしい(が、整頓した形で導入してくれるのならいい)
2009/07/06 08:54:51 UTCnwn
#
GHC はユーザに対してサディスティックですよねー
#
あと論文の結論が「やってみるまでわかりません」ってどうなんだ
2009/07/06 08:56:45 UTCikegami
#
まあ、Haskell '09 という会議で発表された、口頭発表なので...
#
http://lambda-the-ultimate.org/node/3319
#
これのことをいってました
2009/07/06 08:59:25 UTCnwn
#
あ、これ読んだけど意味わかんなかった論文だ。。。こんなことが書いてあったのか
2009/07/06 09:06:42 UTCnwn
#
今最初のページだけ読み返してみました。この後に紹介されてる中間言語ってこういう目的があったんですね
2009/07/06 09:10:09 UTCikegami
#
カリー化することによって、欠落してしまう型情報などをどうしよう、というのが主眼です
#
本当に効果があるのか、ぼくも知りたいので
#
とりあえず、論文中の FH -> StrictCore 変換器をつくって評価することからはじめる予定
#
← Haskell 処理系をいつか作りたい子
#
あと、もうすこしハードルが低い目標として Web server も書いてみたい
#
Apache ハンドブックに
#
1.高速 2.マルチタスク 3.認証 4.エラー表示 5.RESTful 6.proxy 7. secure
#
が、Web サーバには要求される、と書いてあるが
#
0. Haskell で自由に遊べること! がない!
#
Haskell で自由に遊べない Web server なんて...
2009/07/06 09:18:30 UTCnwn
#
それは需要が(ry
2009/07/06 09:20:56 UTCikegami
#
Haskell で世界征服
#
まずは練馬から
2009/07/06 10:30:16 UTCnobsun
#
point-free <-> pointy
2009/07/06 10:52:35 UTC[1..100]>>=pen
#
arbitrary = fmap My (listOf arbitrary)
#
ghciで
#
Not in scope: `listOf' といわれた
#
ghci version 6.10.2
#
あ、なんかオプションいる?
2009/07/06 11:14:11 UTCnwn
#
えーと ghc-pkg describe QuickCheck して バージョンを確認してみてください
#
2.* 以上じゃなかったら cabal upgrade QuickCheck してバージョンを上げてください。それで動くはず
2009/07/06 11:32:15 UTC[1..100]>>=pen
#
1.2.0.0 でした。
#
cabal-0.6.2 をダウンロードして
#
runhaskell Setup configure したら
#
Setup: At least the following dependecies are missing:
#
HTTP >= 4000.0.2 && <4001, zlib >=0.4 && <0.6
#
っていわれた。
2009/07/06 11:34:08 UTCnwn
#
なんだってー!?
2009/07/06 11:34:17 UTC[1..100]>>=pen
#
cabal の Windows用インストーラないかな
2009/07/06 11:35:17 UTCnwn
#
QuickCheck のほうを落として直接インストールするほうが速いかも
#
http://hackage.haskell.org/packages/archive/QuickCheck/2.1.0.1/QuickCheck-2.1.0.1.tar.gz
#
さすがに mtl がないとは言われんよね。。。
2009/07/06 11:38:40 UTC[1..100]>>=pen
#
cd QuickCheck-2.1.0.1 して runhaskell Setup configure はOK。
#
runhaskell Setup build で
#
Exception.hs:12:31:
#
Class `Exception' used as atype
#
In the type `Exception'
#
In the type `Either Exception a'
#
In the type `IO (Either Exception a)'
2009/07/06 11:40:10 UTCnwn
#
ほえー
#
うあ、ほんとだ、cabal だとならないけど runhaskell だと出るね
2009/07/06 11:51:45 UTCnwn
#
これじゃだめ? http://www.haskell.org/cabal/release/cabal-install-0.6.2/cabal.exe
#
via http://www.haskell.org/haskellwiki/Cabal-Install
2009/07/06 11:52:35 UTCikegami
#
Exception でおこられたら、ソース書き換えて、Exception を OldException にするというその場しのぎの hack
#
でなんとかなりますが、おすすめできません
2009/07/06 11:59:20 UTCnwn
#
listOf gen = arbitrary >>= sequence . flip replicate gen
2009/07/06 12:03:50 UTC[1..100]>>=pen
#
cabal.exe update
#
Downloading the latest package list 云々
#
cabal: Failed to download index 'ErrorMisc "unsucessful HTTP code: (5,0,0)"'
2009/07/06 12:05:52 UTCnwn
#
InternalServerError だと...
#
でもまあ、動かすだけなら listOf gen = arbitrary >>= sequence . flip replicate gen で支障はないと思われるけど
2009/07/06 12:09:30 UTC[1..100]>>=pen
#
Warning 出ましたけど(後述)それで ghci で読み込めました。
#
でなんていう関数呼べばチェックできます?
#
Warning は
#
Waring: No explicit method nor default method for `coarbitrary'
#
In the instance declaration for `Arbitrary (MyList a)'
2009/07/06 12:12:04 UTCnwn
#
quickCheck prop_laws だったと思う
#
その warning は無視して大丈夫です
2009/07/06 12:13:00 UTC[1..100]>>=pen
#
結合律外したのは OK, passed 100 test. 動きました。感謝。
2009/07/06 12:13:31 UTCnwn
#
いえいえー
2009/07/06 12:14:05 UTCikegami
#
よく使う関数は $(HOME)/.ghci に記述しておくと、必ず定義されますが
2009/07/06 12:14:18 UTC[1..100]>>=pen
#
お、メモメモ。
2009/07/06 12:14:29 UTCikegami
#
Windows 環境の $(HOME) がなにになるのかはよくわかんない... (%HOME% ???
#
:def (コマンド名) 無名関数
#
:def qc \c -> return $ ":m + Test.QuickCheck \nTest.QuickCheck.quickCheck (" ++ c ++ ") \n:m - Test.QuickCheck"
#
みたいな
2009/07/06 12:17:07 UTC[1..100]>>=pen
#
%HOMEPATH% かな? Windowsよくわからないす。
2009/07/06 12:17:23 UTCikegami
#
cygwin だと ~ がありますよね、たしか
#
MingW なんだっけか
#
Windows の上で ghc 動かすのは仕事でやらされてうんざりしたので、記憶から消えている
2009/07/06 13:03:48 UTCikegami
#
IRC #haskell:*.jp で話が出たのですが
#
先のはなしになりますが、9 月の連休 9/19-23 を
#
Haskell に関するなにかの週 (hackathon でもいいし)
#
にわりあてるというのはどうでしょう
#
その日程ぜんぶに参加しなくてもいい
#
場所は、いろいろあるので、東京で会場つくって集まってもらってもいいし、地方に住んでいる人が Ust ってもいい
#
初心者もふくめてゆるいかんじで
2009/07/06 13:11:28 UTCikegami
#
仮のプランを文章にしてみて、それから皆にみてもらって、推敲してみます
2009/07/06 22:13:11 UTCnobsun
#
おお。すばらしい、wktk
2009/07/06 22:15:18 UTCikegami
#
おはようございます
2009/07/06 22:26:56 UTCikegami
#
http://www.sampou.org/cgi-bin/haskell.cgi の Wiki を秋のイベントの設計のために使ってもいい?
2009/07/06 22:34:00 UTCikegami
#
といいつつ、空のページをつくっちゃおう
2009/07/06 23:09:51 UTCikegami
#
文字 Encode は EUC-JP なのかー(でも、ありがたいので作った)
#
コメントも含めて変な文字使わなければ、外人ブラウザでも見えるはずだ