1 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 20:28:13 ] haskell.org www.haskell.org/ 日本語サイト www.sampou.org/cgi-bin/haskell.cgi www.shido.info/hs/ 過去ログ 関数型プログラミング言語Haskell Part1 pc.2ch.net/tech/kako/996/996131288.html Part2 pc2.2ch.net/test/read.cgi/tech/1013846140/ Part3 pc8.2ch.net/test/read.cgi/tech/1076418993/ Part4 pc8.2ch.net/test/read.cgi/tech/1140717775/ Part5 pc8.2ch.net/test/read.cgi/tech/1149263630/ Part6 pc11.2ch.net/test/read.cgi/tech/1162902266/ Part7 pc11.2ch.net/test/read.cgi/tech/1174211797/ ・2chの仕様により、行頭の半角スペースは表示されません。 コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
403 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:50:16 ] 現状まともにプログラミングできる環境がemacsしかない eclipseは使いづらいし、xyzzyのhaskell-modeはバグだらけだしwindowsでしか動かないし。
404 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:52:19 ] >>402 モナドなんてHaskellではただのデータ型なんだから、別に難しいことなんかないよ。
405 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 09:01:44 ] >>403 vim にもあるでしょ?俺は vim 使ってるよ
406 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 11:04:47 ] 俺は、viはほとんど使えないんだ。 設定ファイルをちょこっと編集するぐらいなら使うが、深い使い方は覚えてない。
407 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 15:34:50 ] >>401 ここに由来が書いてあります。 www.haskell.org/haskellwiki/Pointfree
408 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 17:39:13 ] darcs2って今までのdarcsとどう違うの haskellの組み込み言語atomを詳しくおしえて
409 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 18:22:16 ] 関数型初心者です。 今、SICPを少しずつ読んでるのですが、set!のようなものをHaskellがモナド化するのは 単に純粋であることに拘るからでしょうか。IORefみたいなものがset!に当たるかと思います が、副作用アリだぞ、ということを意識させる以上のメリットとかがよく分かりません。
410 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 20:10:23 ] >>409 プログラマに直接メリットはない。 メリットは最適化コンパイラを作るのが楽になること。
411 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 04:05:03 ] 関数型言語をやる人の多くは、学生も含め研究者です。 研究テーマはプログラミング言語の中でも、 意味論やプログラム解析などが多く、 そういう研究では参照の透明性が非常に有益な性質です。 たとえば、Javaで盛んに研究されているエスケープ解析も、 初期の成果では、関数型言語で行われたものが多いです。 また参照の透明性を保つことは、実務プログラマにとっても大変有益で、 プログラムの簡明さを保つことにつながります。 良く理解すれば、他の言語でも使える一つの方法論を得たことになります。
412 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 04:32:28 ] C99のコンパイラ作ってくれ。
413 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 04:33:24 ] インタープリタで頼む。CなのにGCがオプションであったりとか。
414 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 08:18:04 ] CINTがあるじゃないか 現状どうなってるか全く知らないけど
415 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 09:06:52 ] >>410-411 そんな小難しい話しなくても、評価順の決まっていない言語で副作用を使うのが どれだけ厄介か考えれば済むことじゃないか?
416 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 09:42:37 ] >>409 確かに純粋であることに拘っているからという点は大きい。 しかし、それだけではなく、例えば、 Haskellではリストを使ったプログラムを書いている途中でそれを非決定性計算と みなしてプログラムの一部を書くとか、IOに限らずモナドを気軽に使う人もいる。 そのためモナド一般を扱う便利関数(mapMとかモナド変換子とか)が多く用意されている。 IOがモナドになっているとそういった便利関数が使えるので便利。 また、モナドになっていると読みやすさのためにコードをまとめたり 移動させたりといった操作が気軽にできる。 例えば副作用のある言語で f x = x + y + (副作用のある式) where y = (副作用のある式) とかやるとどの順番で副作用が現れるかとか、yはどのタイミングで 何回評価されるのかわからない。 Haskellであればそのような問題はないので気軽にwhereにコードを まとめたりできる。
417 名前:409 mailto:sage [2008/01/12(土) 11:02:27 ] 皆さん、ご回答ありがとうございます。 >>415 そうなんですが、モナドはdo記法が可能で、これは実質手続き型の 記述ですよね。手続き型の記述が関数型言語内で可能だから、IOが モナドになっていると思うのです。 >>416 モナド自体は演算のリレーということで分かるんですが、副作用の発生 する式をそうする理由は、上に書いたように、単に順番が保証されるのが モナドである、という以上の理由は無い気がします。 どちらかというと、>>410 さんの書いていることがメインなのでしょうかね。
418 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 12:10:33 ] モナドのおかげで、 CやSchemeよりコンパイラの最適化がより進むって事はないんで、 そこのところは誤解しないように。 参照の透明性から、プログラム変換しやすくなるので、 コンパイラの研究がやりやすいってだけ。
419 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 12:10:54 ] >>417 >単に順番が保証されるのがモナドである 違う。遅延処理ではg . f(x)でf → gと簡約されるかどうかがわからないのと同じように ¥x -> mf >>= mg でmf → mgと簡約されるかどうかはわからない。 モナド自体には「計算のリレー」の意味はあるけど「順番に実行する」意味はない。 IOモナドみたいな奴は、計算のリレーが示すその一連のIOアクションがmainに渡されたときに (遅延しないHaskell処理系が)順番に実行することで「順次実行」を実現している。 IOがモナドになっているのは「計算がリレーの形になっている」ことを保障させるためだけ。 UnsafeInterleaveIOはIOモナドから出してすぐ入れるだけの処理だけどIOアクションが遅延するようになる。 これは計算のリレーを途中で切断したからその部分だけ順次実行できなくなったんだね。 これを使ってる関数にはgetContentsやinterleaveとかがある。
420 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 14:57:58 ] 前に読んだことがある論文で、 HaskellのIOの実装に関する論文なんだが、 タイトルを忘れてしまった。 それらしい論文のタイトルを挙げてくれませんか?
421 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 15:08:02 ] 俺はsimonpjのこれが面白かった。 Tackling the awkward squad: monadic input/output, concurrency, exceptions, and foreign-language calls in Haskell research.microsoft.com/%7Esimonpj/Papers/marktoberdorf/mark.pdf
422 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 17:23:16 ] >>421 これだこれだ ありがとう
423 名前:421 mailto:sage [2008/01/12(土) 18:09:21 ] うぉー、一発的中! ご褒美に最近読んで面白かったHaskell論文のタイトルくれ
424 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 02:35:49 ] web.yl.is.s.u-tokyo.ac.jp/~ganat/memo/aboutHaskell.html これに書かれてる、 > Ericssonによる 電話のソフトウェアを用いた一連の実験によれば、9から25倍の向上が 見られました の部分の根拠となる論文って何?
425 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 12:27:39 ] 2組のタプルの値を交換する関数って 標準でありますか? exTuple (x,y) = (y,x) みたいな感じの。無いならいいんですが・・・。
426 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 13:26:01 ] 無いと思う。強いて言えばuncurry (flip (,))だけど。
427 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 13:39:28 ] なるほど uncurry ですか。 flip (,) までは考えてたんですが ありがとうございます。
428 名前:デフォルトの名無しさん [2008/01/14(月) 15:15:28 ] 十進数 (e.g. [1,2]) を二進数 (e.g. [1,1,0,0]) に変換するプログラムを, foldl を用いて書け,という問題を連休中ずっと考えてるんですが, 脳味噌が手続き型で凝り固まっていてさっぱりわかりません. どうやって書くのか教えて頂けませんか.
429 名前:デフォルトの名無しさん [2008/01/14(月) 15:19:02 ] 手続き的になら書けるの?
430 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 15:26:32 ] 教科書的に書こうとしてみたが、こんなんでいいか? import List -- n進数表示から整数へ fromBaseN :: Integer -> [Integer] -> Integer fromBaseN n ds = foldl f 0 ds where f acc d = n * acc + d -- 整数からn進数表示へ toBaseN :: Integer -> Integer -> [Integer] toBaseN n 0 = [0] toBaseN n x = reverse $ unfoldr f x where f 0 = Nothing f x = Just (mod x n, div x n) -- 十進数から二進数へ decToBin :: [Integer] -> [Integer] decToBin = toBaseN 2 . fromBaseN 10
431 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 15:30:33 ] >>430 教科書的なら一発でできる方法があるはずだ
432 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 20:10:49 ] >>431 mjd?
433 名前:デフォルトの名無しさん [2008/01/14(月) 20:36:34 ] ghc6.6のころはSystem.Console.Readlineってデフォルトではいってましたよね? 当方Windowsなんですが、 久しぶりにHaskellやろうと思って6.8.2をインストールしたんだけどSystem.Console.Readlineがない・・ 一年くらい前につくったインタプリタがビルドできないっす;; にわかなのでライブラリインストールもままならないのですが、cabal-installってWindowsでも使えますでしょうか?
434 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:05:11 ] n進数→十進数をfoldlでやるならわかるけど その逆は思いつかんなあ
435 名前:デフォルトの名無しさん [2008/01/14(月) 22:12:17 ] なつめって初めて知ったけど、こんな所にも Haskell を使ってる人が居るとは面白い natume.sourceforge.jp/
436 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:17:04 ] 重すぎて使い物にならないけどな
437 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:29:35 ] >>433 Haskellプログラム書くならHaskell98に準拠しないと互換性なくなるぜ?
438 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:30:28 ] どなたか>>424 の質問の返答をおねがいします
439 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 03:18:49 ] >>430 428 では無いんだが Just (mod x n, div x n) ここって modDiv 使った方が速いのか? そうすると >>425 みたいなのを使うべき?
440 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 03:19:50 ] modDiv -> divMod だった。ごめん。
441 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 00:40:44 ] >>439 divMod 使う方が速いんじゃないかな。 かといって>>425 は読みにくいから Just (r,q) where (q,r) = divMod x n でいいんじゃない。
442 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 06:56:19 ] なるほど、サンクス。
443 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 11:52:42 ] 数が小さいと分かっている時: (なおかつ実行効率が必要なら) modとdivの計算コストは小さいから、 タプルを消費しないように書いた方がいい。
444 名前:430 mailto:sage [2008/01/16(水) 13:48:57 ] 実行効率なんて全然考えてなかったよ とりあえず実測してみた。ghc-6.8.2 -O2、入力はrandomRIO (0, 2^16)で 19.6 19.2 toBaseN 14.2 14.6 toBaseN_where 12.6 13.1 toBaseN_loop 8.6 10.8 toBaseN_case 7.9 7.0 toBaseN_loop_case 左から、%time、%alloc、関数名。_whereは>>441 のやりかた。_caseはwhere節の代わりにcase式を使ったもの _loopはreverse+unfoldrの代わりに手でループ(末尾再帰)を書いたもの 総実行時間の約1/4がGCだった 数が小さくてもdivとmodのコストが大きいな
445 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 17:30:40 ] 無知でスマソ 末尾再帰ってことは $! を使ってるってこと? 良ければソースを見せて貰えませんか。
446 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 19:00:45 ] >>445 なぜか$!に慣れないのでseqを使ってるけど toBaseN_loop_case :: Integer -> Integer -> [Integer] toBaseN_loop_case n 0 = [0] toBaseN_loop_case n x = f x [] where f 0 ds = ds f x ds = case divMod x n of (r, q) -> f r (q:ds) toBaseN_loop :: Integer -> Integer -> [Integer] toBaseN_loop n 0 = [0] toBaseN_loop n x = f x [] where f 0 ds = ds f x ds = let q = div x n; r = div x n in q `seq` r `seq` f r (q:ds)
447 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 19:22:34 ] 今気付いたけど、toBaseN_loopのdivは片方modじゃないといかんな そういうわけで>>444 の結果は間違ってる
448 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 19:16:16 ] たかだか有限時間で終わる処理について実行効率など考える必要はない
449 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 19:17:04 ] 神様キター!
450 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:31:07 ] >>448 人間が不快に感じるかどうかなんて些細な問題だよな
451 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 22:19:48 ] だったら数学やっててくれ。
452 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:05:36 ] >>448 512ビットの素因数分解だって有限時間でできますよ。
453 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 03:21:02 ] >>448 お前の人生も有限時間で終わるぜ
454 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 10:02:31 ] この宇宙は有限時間で終わりますか?
455 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 18:40:07 ] どなたか State モナドの使い方を 教えて貰えませんか?
456 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 18:58:23 ] 使いどころが知りたいのか書きかたが知りたいのか
457 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:20:13 ] >>455 例が腐るほどWEB上にあるだろ 検索してみろよ
458 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:22:47 ] 使いどころです。
459 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:34:18 ] >>458 入門書に載ってた例だけど、 ・文字列を要素とする二分木が与えられたとき、その要素を整数に置換した木を得たい。 ただし同じ文字列は同じ整数に対応させること。例えば、
460 名前:459 mailto:sage [2008/01/19(土) 19:40:19 ] 途中送信御免 例えば、 (("hoge") "hage" (("fuga") "hage" ("fuga"))) という木なら ((0) 1 ((2) 1 (2))) にする。 手続き型言語なら、実行した置換を記録しながら木を左から走査していけば良いわけだが、 Stateモナドを使えばHaskellでも同様に書ける。逆にStateモナドを使わずに写像を引き回すのは面倒。
461 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 21:49:50 ] 広範囲で変数を持ちまわるのに 普通の言語ではグローバル変数とかインスタンス変数に書き込んだりするけど、 そんなどこで変更されるかわからないようなアブナイことしなくても (a,s) -> (b,s)の形で持ちまわればいいよね、ってのがStateモナドなんだから、 普通は変数を使う処理を考えればおのずから例はでてくるんじゃないか?
462 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 08:17:57 ] >>461 「普通は変数を使う処理」の大部分はHaskellでStateモナドを使わずに綺麗に書ける。 だから混乱するんだと思うが。
463 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 19:37:59 ] >>460 禿言うなヽ(`Д´)ノ
464 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:55:16 ] >>460 hageにも人権をヽ(`Д´)ノ
465 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 10:36:58 ] (("nukege") "usuge" (("fuga") "usuge" ("fuga")))
466 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 15:17:31 ] オセロとか将棋とかの盤面のデータ構造についていつも迷うんだが、 いったいどういうデータ構造にするのが一番効率がいいのかね 2次元リストとか、Mapとか、いろいろあると思うが・・・
467 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 15:44:00 ] >>466 よく使われるのは1次元配列とbit board
468 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 12:50:26 ] ByteStringでのParsec実装が欲しいっす。
469 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 19:11:50 ] そういえばParsecがどうやって実装されてるか知らない ソース見てみたけど何か難しそうだ
470 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 23:03:19 ] 普通にモナドじゃないの?
471 名前:デフォルトの名無しさん [2008/01/29(火) 13:51:05 ] log4*的なロガーライブラリってないでしょうか?
472 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:58:35 ] >>471 実際に使ったことはないけど つttp://hackage.haskell.org/packages/archive/pkg-list.html#cat:Interfaces
473 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 14:11:30 ] >>472 おお!ありがとうございます。 試してみます
474 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 15:37:30 ] 質問です。 C言語で int hoge(void) { int x,i; for(x=0, i=0; i<100000; i++) { x=x+i; } return x; } をHaskellで書く場合は再帰で書くほうが良いのか、foldlで書くほうが良いのか分かりません。 他にも書き方があるかもしれませんが、一番メジャーなループの書き方を教えてください。
475 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:03:59 ] まるで最低一種類は自力で書けるかのような言い方だな
476 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:09:44 ] どんな場合にも一番いい方法が存在するかのような言い方だな
477 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:16:33 ] >>474 俺は、再帰でない書き方をすぐに思い付かなかったときだけ再帰を使ってる その例なら迷わずsum [0..100000]だな
478 名前:474 mailto:sage [2008/01/30(水) 16:19:09 ] >>477 ありがとうございます。 その場合、リストはどのように処理されるのでしょう? つまり、1000番目の要素を足しているときに、999番以下の要素はもはや必要ないわけですけれど、 sum関数が終了するまでメモリに記憶されているのでしょうか?
479 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:29:10 ] >>478 どこからも参照されていないから、いつでもGCされうる状態 実際にメモリ上に残っているかどうかはGCのタイミング次第
480 名前:474 mailto:sage [2008/01/30(水) 16:34:17 ] >>479 ありがとうございます。 では逆に1000番目の要素を足しているときに、1001番目の要素はすでに生成されているのでしょうか? 足す直前に生成されるのでしょうか?
481 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:50:17 ] >>480 > 1001番目の要素 とはどういうものを意識してる?具体的にkwsk
482 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:52:05 ] >>480 処理系と最適化オプションに依る 素朴な遅延評価だと前者 sum [0..100000] ==> foldl (+) 0 [0..100000] ==> foldl (+) 0 (0:[0+1..100000]) ==> foldl (+) (0+0) [0+1..100000] ==> foldl (+) (0+0) (1:[1+1..100000]) ==> foldl (+) (0+0+1) [1+1..100000] … ==> foldl (+) (0+0+1+2+...+100000) [] ==> 0+0+1+2+...+100000 … だけど、例えばghc-6.8.2で-O2だと、Integer用に特殊化されたsumの実装が使われて、 foldlの蓄積引数が積極評価されるので後者になる
483 名前:482 mailto:sage [2008/01/30(水) 17:08:24 ] 分りにくい気がしたので補足 どっちの評価順でも、リスト生成は遅延される ただし、素朴に遅延評価をやると足し算まで遅延するので、結果としてリストを走査し終わるまで足し算を開始できない GHCの最適化は足し算を遅延させないようにするもの
484 名前:474 mailto:sage [2008/01/30(水) 17:08:53 ] >>482 ありがとうございます。 とても参考になりました。
485 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 17:56:59 ] イータ簡約って奴でしょ。 www.lambda-bound.com/book/lambdacalc/node21.html
486 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 18:22:54 ] 質問です。 sourceforge.net/project/showfiles.php?group_id=168626 で6.8.1用のwxHaskellをダウンロードしてインストールし、 Windows XPでwxHaskellのサンプル(Minimal.hs)を ghc --make Minimal.hs としてコンパイルしてみたのですが、 出来上がったMinimal.exeをエクスプローラからダブルクリックで実行すると 目的のウインドウとコマンドプロンプトのウインドウの両方が表示されてしまいます。 コマンドプロンプトのウインドウはとても邪魔なのですが、 これが表示しないようにするにはどうすればよいのでしょうか? さらに、実行ファイルを配布する際にDLLを付属するのは格好が悪いので、 DLLを使わないコンパイル方法はないものでしょうか?
487 名前:486 mailto:sage [2008/01/30(水) 18:29:59 ] 前者の問題は過去スレを検索して解決できました。 コンパイルオプションに-optl-mwindowsをつければよいのですね。 早とちりしてすみません。 後者の方はまだ解決していません。
488 名前:486 mailto:sage [2008/01/30(水) 19:01:48 ] ファイルがめちゃくちゃでかくなると思っていろいろ調べたのですが、 e.tir.jp/wiliki?hdn > よく読んだら、「余分なデータの削除なるオプションで500KB弱になった」と書いてある。それらしいオプションは…… > > --overlay=strip strip any extra data attached to the file [DANGEROUS] > > なんか、「DANGEROUS」って書いてあるんだが。 とありますが、ghc6.8.1ではそのオプションは削除されています。 e.tir.jp/wiliki?hdn > stripと言えば、binutils付属のstripコマンドもあった。 > ... > strip -s hsddd01.exe > 2.3Mが1.1Mになった。バイナリの半分以上がシンボルでできていたのか……。 この方法はマニュアルの www.haskell.org/ghc/docs/latest/html/users_guide/smaller.html に言及されていました。 -funfolding-use-threshold0 というオプションをMinimal.hsのコンパイル時につけると逆に若干ファイルサイズが増えました。
489 名前:デフォルトの名無しさん [2008/01/31(木) 12:20:45 ] GHC6.8.2(Win)でbytestring-0.9.0.4をつかって -profフラグ付でコンパイルしようとすると Perhaps you haven't installed the profiling libraries for package bytestring-0.9.0.4? と出て失敗してしまいます。(profフラグをつけなければ成功します) 対処方ご存知の方いらっしゃいますか? つか、ByteStringに変更してさらに遅くなった俺涙目
490 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 17:57:26 ] >>488 その--overlay=stripはupxのオプションだろ >>489 そのbytestringパッケージはどうやってインストールした? cabalなら、configureのときに-pオプションを付けないとプロファイル版ライブラリがインストールされない
491 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 02:37:31 ] 質問です。 windows上でファイルのアンロックを明示的に行うにはどうすればよいのでしょうか? ロックがかかったままのファイルに書き込みする必要があるのです。
492 名前:489 mailto:sage [2008/02/01(金) 12:44:40 ] >>490 なるほど、ありがとうございます。 -p付でインストールしなおしてみます。
493 名前:デフォルトの名無しさん [2008/02/03(日) 17:41:55 ] % cat hello.hs main = putStrLn "こんにちは、世界!" % ghc hello.hs -o hello % ./hello ...... ←[ここは文字化け] UTF-8でソースを書いて、コンパイル&実行したのですが、 文字化けします。 ver6.6.1(Ubuntu7.10のバイナリパッケージを使用)なのですが、 UTF-8は使えないのでしょうか? コンパイルオプションが必要ですか?
494 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 18:05:27 ] >>493 >>5-6 参照
495 名前:492 mailto:sage [2008/02/03(日) 18:44:28 ] >>493 どうもありがとうございます。 調べてみます。
496 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 21:46:49 ] >>469 ふつケルの終わりのほうに超簡易Parsec実装の解説がある。
497 名前:デフォルトの名無しさん [2008/02/05(火) 12:00:00 ] do記法がどのように(>>=)変換されているのかがよくわからないです。 たとえば do { a <- return 1; Just 2 } は return 1 >>= (\a -> Just2) なのはぎりぎりわかったような感じですが 3つ以上 do { a <- return 1; Just 2; return a } だとどうなるのでしょうか?
498 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 12:13:23 ] 仕様を読めれば仕様を読むのが一番早い
499 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 12:29:01 ] >>497 最初の一つだけ変換する return 1 >>= (\a -> do Just 2; return a) 残ったdoも同じ規則で変換すれば良い。最終的には、 return 1 >>= \a -> Just 2 >> return a
500 名前:497 mailto:sage [2008/02/05(火) 12:31:43 ] >>499 なるほど!ありがとうございます!
501 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:33:19 ] >>500 do { a <- return 1 ; Just 2 } って書くとemacsで見た目きれいにレイアウトできる。 >>=を使った場合、 return 1 >>= \a -> Just 2 って書くときれいにレイアウトできる。 単に見た目の話だけど^^;;
502 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 00:28:19 ] Haskell でも型のキャスト出来るんかね リファレンス見てたらそれっぽいのが・・・。
503 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 00:31:47 ] >>502 (1::Int32)