トップページtech
981コメント300KB

関数型プログラミング言語Haskell Part9

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/05/17(土) 16:41:29
haskell.org
http://www.haskell.org/

日本語サイト
http://www.sampou.org/cgi-bin/haskell.cgi
http://www.shido.info/hs/

過去ログ
関数型プログラミング言語Haskell
Part1 http://pc.2ch.net/tech/kako/996/996131288.html
Part2 http://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 http://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 http://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 http://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 http://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 http://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 http://pc11.2ch.net/test/read.cgi/tech/1193743693/
・2chの仕様により、行頭の半角スペースは表示されません。
 コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
0455デフォルトの名無しさん2008/08/10(日) 08:02:29
PJは
Implementation of Functional Programming
Implementing Functional Languages,(D. Lesterと共著)
を書いていて両方公開。
http://www.haskell.org/haskellwiki/Books
0456デフォルトの名無しさん2008/08/10(日) 08:05:37
>>449
http://www.haskell.org/haskellwiki/Tutorials
0457デフォルトの名無しさん2008/08/10(日) 13:23:16
>>454
すまん、>>455のImplementing...のほうを言いたかった。
045836 ◆K0BqlCB3.k 2008/08/10(日) 13:39:12
>>453
>>449は本当にモナドとラムダの練習のためだけに問題をほしがっているのかどうかってこと。
それに、初心者は何か目に見えて動かせるものを書きたがるものさ。
誰かに見られることを想定して書くのと、「動けばそれでいい」だけで書くのとでは、
やっぱり前者の方がいろいろ調べたりすることで勉強になる。
0459デフォルトの名無しさん2008/08/10(日) 15:23:20
>>455
そこ載ってなくね?w
http://research.microsoft.com/~simonpj/Papers/slpj-book-1987/index.htm
http://research.microsoft.com/~simonpj/Papers/pj-lester-book/

>>457
サンクス。目次しか見てないけど、
Implementationがパターンマッチや型など広く扱ってて、
Implementingはコンパイラのコアな部分を主に扱ってる感じ?
静的型付けとグラフ簡約の運命的な出会いというからそうでもない?
まあImplementingのほうを読んでみます。

>>458
そうですね。
0460デフォルトの名無しさん2008/08/10(日) 16:23:15
載ってるよー

グラフ簡約と運命的な出会いというと遅延評価じゃないかね。
特にPJ的には。
04614192008/08/11(月) 14:41:51
>>460
まあグラフ簡約は前提として、それを効率的に実装するには静的型付けがイイんだよ、
と、約20年前に読んだ時に思った。
04624192008/08/11(月) 14:44:37
20年前じゃなくて15年前だった。かなり記憶が混乱してるな、俺 orz
0463デフォルトの名無しさん2008/08/11(月) 16:05:22
>>461
あまり理解できてなかったんじゃない?w
0464デフォルトの名無しさん2008/08/11(月) 16:13:31
>>463
かもしれない。
できれば君が読んでポイントだと思ったところを挙げてくれると皆の参考になると思う。
0465デフォルトの名無しさん2008/08/11(月) 16:20:35
PJの最初の本だと、
例え動的型チェックをやろうとも、そのコードは、
他の普通のコードと一緒でスーパー・コンビネータになって、
グラフ簡約されるだけだから、コンパイル時に型チェックを済ませることが、
スーパー・コンビネータのグラフ簡約上、特に有利だとは思えません。
0466デフォルトの名無しさん2008/08/11(月) 17:39:55
横から口はさんですまんが、静的型がついていたほうがパターンマッチが速くならね?
0467デフォルトの名無しさん2008/08/13(水) 09:02:33
Haskellの継続ってSchemeとは違いありますか?
0468デフォルトの名無しさん2008/08/13(水) 10:48:15
call/cc のようなものはありません
0469デフォルトの名無しさん2008/08/13(水) 11:17:46
>>468
MonadCont の callCC :: ((a -> m b) -> m a) -> m a のことじゃないの。

>>467
俺も気になる。違いはあるだろうけど、どう違うのか。
0470デフォルトの名無しさん2008/08/13(水) 11:23:16
やっぱりそうですか。継続ベースのアプリ
作るとしたら、ステートモナドに次のアクション
入れておくとかですかね。
0471デフォルトの名無しさん2008/08/13(水) 13:45:50
MonadContだと、型の関係で、無限ループするような式は書けない。
# mfixとか使えば別だけど。

例えば、Schemeで次の式は書けるが、MonadContでは書けない。
(call/cc (lambda (c) c))
(call/cc (lambda (c) (set! foo c)))

つまり、次の式は型が付かない。
callCC (\c -> return c)
callCC (\c -> lift $ put c)

要は、callCCで捉えた継続をそのcallCCの外に出せない。ただし、
callCC (\c -> ... callCC (\c' -> c c') ...)
のように、内部で別のcallCCを使って、それで捉えた継続を外に出すのはOK。

あと、変な例として、
callCC (\c -> return (Right (c . Left)))
はOK。でもやっぱり無限ループはできない。
0472デフォルトの名無しさん2008/08/13(水) 14:58:55
>>471
だとすると、smlのcall/ccを使ったco-routineみたいなことはできないということ?
0473デフォルトの名無しさん2008/08/13(水) 17:43:19
smlのcall/ccを使ったco-routineは知らないけど、co-routine自体はできる。

import Control.Monad.Cont

foo = callCC (\c0 ->
do
c1 <- callCC c0
c2 <- callCC c1
c2 10
undefined)

bar =
(do
c1 <- foo
c2 <- callCC c1
callCC c2)

main = print $ runCont bar id
0474デフォルトの名無しさん2008/08/13(水) 18:18:41
>>471
HaskellでYコンビネータを書くとき型が問題になるけど、
実質的には fix f = let g = f g in g で問題ない。
それと同じように、
loop = callCC (\c -> let g = c g in return g)
とすれば
do { l <- loop; liftIO $ print 0; l }
のように無限ループを書ける。
(これの変数付きループ版が MonadLib にあった。)
(call/cc (lambda (c) c))
がどう使われるのかよく分からないけど、
実質的には同じことになるんじゃないかな?

(call/cc (lambda (c) (set! foo c)))
callCC (\c -> lift $ put c)
は IORef を使うと問題なくできる。
State だと無理だけど、新しく再帰的なデータ型を定義してやれば、
あまり便利では無さそうだけど一応できた。
0475デフォルトの名無しさん2008/08/13(水) 22:46:51
オラ本の執筆遅れてます
著者にプレッシャヨロ
047636 ◆K0BqlCB3.k 2008/08/13(水) 22:51:05
どうせ買わないので暖かい目で見守るだけです。
0477デフォルトの名無しさん2008/08/13(水) 23:21:14
Schemeのcall/ccってその時点の継続を勝手にキャプチャして渡してくれる
んですよね?Haskellではそういうのは無いと思っていいんでしょうか?
0478デフォルトの名無しさん2008/08/14(木) 00:04:58
>>477
モナド無しでということなら無い。
そもそもcall/ccは副作用があるし。
0479デフォルトの名無しさん2008/08/14(木) 13:47:21
>>474ができると言ってるじゃないか
0480デフォルトの名無しさん2008/08/14(木) 17:35:34
あれはモナド有りでの話だよ。
0481デフォルトの名無しさん2008/08/14(木) 18:53:40
ごめん、>>479>>477へのレスね
0482デフォルトの名無しさん2008/08/14(木) 18:54:49
山本モナド
0483デフォルトの名無しさん2008/08/16(土) 19:35:13
Haskellはボブマリーの言語?
http://lethain.com/entry/2008/aug/14/global-popularity-of-programming-languages/
0484デフォルトの名無しさん2008/08/16(土) 20:24:00
コメント欄も読もうな
0485デフォルトの名無しさん2008/08/16(土) 22:50:09
ttp://profile.myspace.com/index.cfm?fuseaction=user.viewprofile&friendid=123319698

こうゆう落ちもある。
0486デフォルトの名無しさん2008/08/17(日) 12:30:17
Xmonad/Config archive - HaskellWiki
http://haskell.org/haskellwiki/Xmonad/Config_archive
の設定ファイル郡を理解できるぐらいまでHaskellについて知りたいんですが
どこから勉強すればいいんでしょう?
知識はXmonadやGhcをソースからインストールできる程度です
0487デフォルトの名無しさん2008/08/17(日) 13:44:52
>>443 >>446 静的で強い型を持つ言語は、単純な実行時エラーを防ぐので
テストは軽減する。haskellなどはそのことが数学的に証明されているので
プログラマはぬるぽやoutofboundsなどの基本的な間違いにであうことなく、
本質だけを考えることができる。
0488デフォルトの名無しさん2008/08/17(日) 14:23:37
パターンマッチに失敗すること多くない?
たとえば「空でないリスト」型が欲しいとき、ぬるぽ的な実行時エラーを防げるの?
0489デフォルトの名無しさん2008/08/17(日) 14:47:05
ぬるぽは無いけどout_of_bounds発生させまくりですが
依存型のある言語なら防げるかも知れんけど
0490デフォルトの名無しさん2008/08/17(日) 15:31:08
>>487
おまえ初心者スレにいたHaskell信者だろ。
0491デフォルトの名無しさん2008/08/17(日) 18:08:12
はいはい両者リングアウト
0492デフォルトの名無しさん2008/08/17(日) 18:14:59
>>488
それヘボすぎ
0493デフォルトの名無しさん2008/08/17(日) 18:26:58
モナドがIOに使えるのは分かった。けどどうしてそれをIO以外にも使ってるの? >Haskell
誰か教えて下さい
0494デフォルトの名無しさん2008/08/17(日) 18:36:20
Maybe(笑)を証明するため
0495デフォルトの名無しさん2008/08/17(日) 18:36:41
便利だから
0496デフォルトの名無しさん2008/08/17(日) 18:42:38
どんな時に便利ですか?
0497デフォルトの名無しさん2008/08/17(日) 18:59:33
モナドのすべて
ttp://www.sampou.org/haskell/a-a-monads/html/
の以下の部分を読むとわかるかも

Maybe というモナド
ひとつの例
リストもモナド
04984972008/08/17(日) 19:11:05
第 II 部:標準的モナドのカタログ
の各モナドの利用場面や動機を見るのもいいかもしれない
0499デフォルトの名無しさん2008/08/17(日) 19:15:59
一応リストモナドやMaybeモナドが計算に使える、というのは理解しているつもりですが、
便利だからという理由以外にモナドをIO以外に使う理由はあったりしますか?
それだけの理由で使うには扱いが難しくて、プログラムを組む度に頭がオーバーヒートしそうになる

慣れの問題かそれとも理解不足か・・
0500デフォルトの名無しさん2008/08/17(日) 19:25:15
>>489
そこでmaybeもなどですよ。
0501デフォルトの名無しさん2008/08/17(日) 20:06:22
モナドという抽象的な枠組みを考えることで
IO, Maybe, List, etcの計算の合成を統一的に扱えるってのが最大の利点なんではないかと。

単に使うだけなら主に慣れの問題だと思う。
いろんな例を見て慣れていけば少しずつ理解もできていくんではないかと。
0502デフォルトの名無しさん2008/08/17(日) 20:09:49
自分の作ったモナド上でdo式を書くと、世界の法則を書き換えてるような気分になってちょっと面白い
0503デフォルトの名無しさん2008/08/17(日) 20:33:06
>>501
レス有難うです
慣れの他に密度の問題もあるかもしれないと思ったり。
他の言語より1行あたりの密度が濃いものになりやすい気がする。
というか濃縮されすぎてわけが分からなくなりやすい気がする。
0504デフォルトの名無しさん2008/08/17(日) 20:38:12
>>501
計算を統一的に扱うだけであれば、普通の型クラスでいいんですよね?

モナドは値ではなくて型コンストラクタに対するクラスなので、ちょっと違う
と思うんですが。
050536 ◆K0BqlCB3.k 2008/08/17(日) 20:39:51
モナドっていうと仰々しいイメージがあるかもしれないけど、
所詮はただの代数的データ型とそのデータ型に対して一貫性あるAPIのセットに過ぎないよ。
ところで、 データ型とAPIのセット のことをなんて呼べばいいの?
0506デフォルトの名無しさん2008/08/17(日) 20:40:10
Stateモナドとかの(s -> (a,s))みたいな変な定義が気持ち悪い
型クラス(b,s) -> (a,s)に型bを部分適用したって考えれば意味は通るけど……
0507デフォルトの名無しさん2008/08/17(日) 21:08:43
>>505
それが「型クラス」、ではないのでしょうか?MonadやFunctorはちょっと
毛色が違うという認識は勘違いでしょうか?
0508デフォルトの名無しさん2008/08/17(日) 21:17:01
http://www.hyuki.com/haskell/20041228215300

Ord、Eq、Show などの データ型とそのAPIのセット は「型クラス」
Functor、Monad、MonadPlus などの データ型の構築子とそのAPIのセット は「型構築子クラス」
0509デフォルトの名無しさん2008/08/17(日) 21:31:22
それ単にOrdとかの『類』は*で引数をとらないけど
Functorの『類』は*->*みたいに引数をとる、って違いにしか見えない
分けて考えるのはおかしいと思う
0510デフォルトの名無しさん2008/08/17(日) 21:37:45
>>509
型クラスと型構成子クラスじゃ抽象度が違うよ。
0511デフォルトの名無しさん2008/08/17(日) 21:49:13
俺も>>509みたいに感じるなあ
抽象度が違うのは理解できるが
05125072008/08/17(日) 21:58:16
抽象度の違う型クラスを持つことで、値の計算遷移とは別レベルの
遷移を持つことが可能だ、という印象を持つんですけどどうなんでしょうか。

普通の計算を行う裏側で別の次元での計算が行われ、且つそれが
結合法則を満たしている、というのがモナドの定義と考えるのは
どうですか?自分は圏論などのこと全く無知なのでHaskellの構文
からの直感的な印象だけなんですけど。
0513デフォルトの名無しさん2008/08/17(日) 21:59:06
じゃあ類が*->*->*(関数(->)とかタプル(,)とか)に対する型クラスとかは
もっと抽象度が違うので別の名前が必要なのか?型構築子構築子クラスとか。
有名な人が書いてるから鵜呑みにしてるだけなんじゃないの?
0514デフォルトの名無しさん2008/08/17(日) 22:31:24
>>512
だいたいあってんじゃね?
見えてる部分で適当に処理を書いたら裏で適当に処理してくれる、
普通のプログラミング言語じゃfor文やif文みたいな処理構造、
あるいはマクロとして提供されるものと同等の処理ができるんだけど、
実態は単に型クラスでしかないので俺定義できるし、高階関数使えるし、表記もシンプルで、いろいろ小細工が利くのが利点。
たとえば、IOみたいにコンストラクタを隠したりすれば脱出不可な構造を作れるってわけ。

結合法則を満たしているってのは、まぁ別に特別なことじゃない。
EqやOrdにも反射律とか推移則とか守らないといけないルールがあるけど、
よっぽどのことがない限り変な実装はしないだろうから、一般のプログラミング言語ではそこまで突っ込まない
でもモナドって実態がよくわかんないから、ルールを明記してる。そんだけでしょう。
0515デフォルトの名無しさん2008/08/17(日) 22:45:32
念のため補足。
>処理構造(略)同等の処理ができるんだけど
普通の言語では処理構造のものが、モナドが利用されてる例としてはErrorモナドとかContinuationモナドとかがあったね。

>よっぽどのことがない限り変な実装はしないだろうから、一般のプログラミング言語ではそこまで突っ込まない
浮動小数点の比較と等価性で違う実装がされてるとか、変な実装もあるけど。

個人的にはMonad則は、
値に関して順次実行できる何かで、値に対して何もしない処理もできる何かだ、というルールだと解釈してる。
0516デフォルトの名無しさん2008/08/17(日) 22:50:03
変な実装=全順序じゃない、と読み替えてくれ。
コンピュータのメモリ節約を考えれば生の浮動小数点型を使うのもまっとうな実装だわw
0517デフォルトの名無しさん2008/08/17(日) 23:19:23
ごめん、誤解を招くといやなのでもう一つ補足……
>値に関して順次実行できる何か
これは実行順序じゃなくて値の計算する方向を言ってるだけだよ。
g.f x がxにfを適用してgを適用するってのと同じことだよ。
実行順序は普通のモナドもIOモナドも方向は決まってないよ。
0518初心者修業中2008/08/17(日) 23:37:55
ん?
実行順序を明確にするのがIOモナドの目的の一つ
と認識していますが。

そういう意味ではないのかな…
0519デフォルトの名無しさん2008/08/17(日) 23:41:24
Haskellをみて日本のhaskellコミュって元気なの?
他の言語に比べて内と外をわけすぎるようなそんな印象をもってる。
なんでだろ?
0520デフォルトの名無しさん2008/08/17(日) 23:58:38
>>518
たとえば、
1:2:3:[]は、
1:2:3:[] → 1:2:[3] → 1:[2, 3] → [1, 2, 3]と簡約されるかもしれないし、
1:2:3:[] → [1, 2:3:[]] → [1, 2, 3:[]] → [1, 2, 3]と簡約されるかもしれない。
でも結果は一緒でしょ?

同じように、
Hello, Worldって出力 >> 一文字入力 >>= 前の文字を出力
みたいなのは、まぁ言ってみれば(不正確だけど)
[Hello,Worldって出力, 一文字入力, 前の文字を出力]みたいな並びにされる(と思われる。実装はカプセル化されていて不明)。
この並びがプログラム終了後にコンパイラにわたって、コンパイラがこれを順番に処理していく。

実はこの並びをプログラム終了後以外に評価する方法があって、それがUnsafePerfomedIOって言う関数。
getContentとかは実はこれを使って実装されている。
Unsafeという名前が示すように、素人にはお勧めできない。(getContent自体は普通に使える。)
0521デフォルトの名無しさん2008/08/18(月) 00:02:55
Maybeの特化にしか見えません
052236 ◆K0BqlCB3.k 2008/08/18(月) 00:25:49
>>519
世界的に全く元気がありません。
ちょこっと変なライブラリを書いたと思えばそれっきり離れていっている人も多数。
0523デフォルトの名無しさん2008/08/18(月) 01:36:55
>>520

後者の簡約は型がおかしいし、1:2:3:[]ではなく、
f x = (unsafePerformIO $ print x) `seq` xで
f 1:f 2:f 3:[]だった場合、前者と後者の簡約順序ではprintの順番が違ってくる。
前者は3,2,1で後者は1,2,3

一方で(>>=)は最左最外簡約でも最右最内簡約でも
左から順にしか値が定まらないようになってる。

putStr "Hello" >>= (\ _ -> getChar) >>= (\ c -> putChar c)
(>>=)の右辺が関数だから左辺の値が定まるまでa >>= bが最終的な値に簡約できないようになっている。
0524デフォルトの名無しさん2008/08/18(月) 03:17:18
>>522
元気無い理由って何でしょうか。他に元気ある言語ってあるのかな。
0525デフォルトの名無しさん2008/08/18(月) 04:14:24
ruby
0526デフォルトの名無しさん2008/08/18(月) 08:38:27
>>520
> 1:2:3:[] → [1, 2:3:[]] → [1, 2, 3:[]] → [1, 2, 3]と簡約されるかもしれない。

型が滅茶苦茶だよ。

> この並びがプログラム終了後にコンパイラにわたって、コンパイラがこれを順番に処理していく。

意味不明。なぜプログラム終了後にコンパイラが出てくる。
ランタイムライブラリとごちゃまぜになているぞ。
0527デフォルトの名無しさん2008/08/18(月) 10:05:00
Haskellにこういう奴が多い気がするのはなぜだ
0528デフォルトの名無しさん2008/08/18(月) 10:21:37
「こういう奴」と書けばどんな奴を指してるのか分かってもらえると思ってるような、
想像力の貧しい奴がこのスレに多いような気がする
0529デフォルトの名無しさん2008/08/18(月) 13:36:03
末尾が「気がする」で終わってるレスは
全部気のせいのような気がする
0530デフォルトの名無しさん2008/08/18(月) 15:08:49
なんという自己言及レス
0531デフォルトの名無しさん2008/08/18(月) 15:12:16
関数型らしくて言いじゃないか
0532デフォルトの名無しさん2008/08/18(月) 15:41:06
>>531
つ座布団1枚
0533デフォルトの名無しさん2008/08/18(月) 21:50:15
* -> * -> * ってどんなとき使うの?
0534デフォルトの名無しさん2008/08/18(月) 22:25:25
アナルトレイン
0535デフォルトの名無しさん2008/08/19(火) 07:45:46
  ( ゚д゚)゚д゚)゚д゚)
  /  つ つ  つ
  (_(_  ノ ノ  ノ
  し∪ ∪ ∪
0536デフォルトの名無しさん2008/08/19(火) 10:10:53
>>505
> ところで、 データ型とAPIのセット のことをなんて呼べばいいの?

プログラミング言語一般での話なら「抽象データ型」でしょうね。
0537デフォルトの名無しさん2008/08/19(火) 11:50:46
>>533
関数(->)とかタプル(,)とか
0538デフォルトの名無しさん2008/08/20(水) 20:24:46
485でおま。
それでなのです。 >ときどきの雑記帖の中の人
0539デフォルトの名無しさん2008/08/21(木) 14:40:13
Arrow は * -> * -> * のクラス
MonadTrans は (* -> *) -> * -> * のクラス
0540デフォルトの名無しさん2008/08/21(木) 21:20:37
http://book.realworldhaskell.org/beta/

これの30章が消えてるんだけど・・・。
0541デフォルトの名無しさん2008/08/21(木) 22:05:29
本買えよ
0542デフォルトの名無しさん2008/08/21(木) 23:26:23
30章だけが読みたいんだよ。

ところで、HaskellでPetStoreってあるの?
054336 ◆K0BqlCB3.k 2008/08/21(木) 23:56:58
>>542
横からすみませんが、
Pet Storeをよく知らないのでちょこっと検索したんですが、
これっていったい何が面白いんですか?
0544デフォルトの名無しさん2008/08/22(金) 00:08:29
>>543
面白くは無いんだけど、色んな言語やフレームワークで同じもの作る
ことで比較をするためのものでしょ。同じアプリがこんな感じで作れ
ちゃうぞ、という。
0545デフォルトの名無しさん2008/08/22(金) 11:40:45
Haskellでウェブアプリというとふつう本か
054636 ◆K0BqlCB3.k 2008/08/22(金) 12:37:40
最近では新しい言語はWEBアプリが書きやすくないと人が入ってこないらしく、
ライトウェイト言語がブームみたいだね。
HaskellはライトウェイトではないからWEBアプリ向きとは全然思えないんだけど、
RubyでRubyOnRailsが考えられたみたいにHaskell独自のWEB向きキラーアプリが
出てこないとHaskellの人気はこれからもずっと平行線だと思うよ。
0547デフォルトの名無しさん2008/08/22(金) 12:41:19
>>546
WEBアプリが書きやすいっていうより、APIとかWEBコンテナが標準装備されてないとダメという感じがする。
Javaの功罪は大きい。
0548デフォルトの名無しさん2008/08/22(金) 12:41:59
まだ横ばいならたいしたもんだ
0549デフォルトの名無しさん2008/08/22(金) 12:48:26
>HaskellはライトウェイトではないからWEBアプリ向きとは全然思えないんだけど、
ライトウェイトって何?動的に型を付ければライトウェイト?
それとwebとどういう関係があるの?
0550デフォルトの名無しさん2008/08/22(金) 13:05:36
あまり考えずに気の向くままに書いてもあっさり動くのが
ライトウェイトってことじゃないか?
web案件は短期だったりアジャイルだったりでライトウェイトに
開発できるのが求められてるってのはある
0551デフォルトの名無しさん2008/08/22(金) 13:10:45
WEBアプリの開発者は、JavaかRubyのHowto本から入ってる。
だから、WEBアプリ開発者は、身体のどこかに、プログラミング言語のJavaかRubyに似てない部分に拒否反応を持ってる。
0552デフォルトの名無しさん2008/08/22(金) 13:11:10
ここでHaskellは人間の思考過程に最も近いから
考えが即座にコードにうつせるため開発期間が最短であると主張する人がどこからか登場
                    ↓
0553デフォルトの名無しさん2008/08/22(金) 13:23:23
                    |
                ( ゚д゚ )↓
                 (⊃⌒*⌒⊂)
                  /__ノ''''ヽ__)
0554デフォルトの名無しさん2008/08/22(金) 13:27:58
>>550
それならHaskellもライトウェイトで良くね?
■ このスレッドは過去ログ倉庫に格納されています