関数型プログラミング言語Haskell Part6
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/07(火) 21:24:26http://www.haskell.org/
日本語サイト
http://www.sampou.org/cgi-bin/haskell.cgi
http://shidot.dyndns.org/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/
関連スレは>>2
関連書籍は>>3
・2chの仕様により、行頭の半角スペースは表示されません。
コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
0486デフォルトの名無しさん
2007/01/10(水) 17:51:370487デフォルトの名無しさん
2007/01/10(水) 17:55:36> square n が n * n と等値。
ええ?!じゃあ、たとえば、
test :: Int -> Int
x * x = test x
ってコンパイル通るんですか?!
0488デフォルトの名無しさん
2007/01/10(水) 19:57:43>どうしてですか?[]は何型なのでしょう・・・
結局の所、map succ [[], [], []] = [succ [], succ [], succ []]だから、
そのエラーはsucc []を実行しようとして失敗したってこと。
なんで失敗するかと言えば、succの引数はEnumクラスのインスタンスじゃないとダメなのに
[] は [a]型でEnumクラスのインスタンスではないから。
HugsとかGHCiでは関数とか値の型は :t 〜 って入力すればわかる。
例えば map succ の型を知りたい時は、
Prelude> :t map succ
map succ :: Enum a => [a] -> [a]
0489デフォルトの名無しさん
2007/01/10(水) 20:06:26mapsucc :: [Int] -> [Int]
mapsucc lst = map succ lst
試しに、上のようなコードを書いてみました。
mapsucc [1,2,3]
を実行すると、
[2,3,4]
のように表示されました。
ここまでは良いのですが、
mapsucc [[],[],[]]
を実行すると、
<interactive>:1:9:
Couldn't match `Int' against `[a]'
Expected type: Int
Inferred type: [a]
In the list element: []
In the first argument of `mapsucc', namely `[[], [], []]'
と表示されました。
おかしいですよね、これって。
0490デフォルトの名無しさん
2007/01/10(水) 20:08:470491デフォルトの名無しさん
2007/01/10(水) 20:11:37[[], [], []] :: [Int] であるためには [] :: Int でないといけない。
だけど[]は[a]であってIntではない。よって型の不一致(Couldn't match `Int' against `[a]')
0492デフォルトの名無しさん
2007/01/10(水) 20:22:32空の型は総称的定義されているべきだと思うんですけど。
上のコードでは
mapsucc :: [Int] -> [Int]
のように明示的に書いたので、Int型にインスタンシエイトされるべきですよね?
0493デフォルトの名無しさん
2007/01/10(水) 20:35:27> 明示的に書いたので、Int型にインスタンシエイトされるべきですよね?
その理屈でいくと、[] + 1 :: Intとか1 + [] :: Int って書いたら
なんか適当なInt型の値が得られなきゃいけないって事?
0494デフォルトの名無しさん
2007/01/10(水) 20:40:391+[]なんて定義できないよね。そう思うよね?
だから、空は抽象的なものであって、Haskellの仕様では、空リストと空は別ものなのです。
0495デフォルトの名無しさん
2007/01/10(水) 20:58:04おそらく
[1,2,3] = 1 : [2, 3] = 1 : ( 2 : [3] ) = 1 : ( 2 : ( 3 : [] ) )
と分解できるから[]が終端なんだと言ったんだろうけど、
これは単に空リスト[]の先頭に3, 2, 1を順に追加していったものがリスト[1,2,3]だってこと。
もしくは、(有限)リストから先頭を取り除く操作をしていった場合、空リスト[]に行き着いた時点でそれ以上先頭を取り除くことが出来なくなるってこと。
0496デフォルトの名無しさん
2007/01/10(水) 21:22:15ただ、リストの要素として[]がリスト[1,2,3]の終わりに入っていると考えるのは間違い。
0497デフォルトの名無しさん
2007/01/10(水) 21:31:430498デフォルトの名無しさん
2007/01/10(水) 22:44:010499デフォルトの名無しさん
2007/01/10(水) 22:55:26本当の集合って何?
0500469
2007/01/10(水) 22:57:09>>495
すいません。「Haskellでは空リストがリストの終わりを表す」とは書いてないです。
やさしいHaskellのp36に
「空リストは特別な値で、リストの末尾に現れます」とあります。
で、自分が「C言語の文字列でいうところのヌル文字みたいなものだ」と
勝手に解釈したんです。
で、
「map関数で何かのリストに適当な関数を適用するとき、
リストの終端を判定するとき空リストがあれば、
再帰を打ち切る」んだなと思ったんです。
もし曲解している点があれば、指摘してください。
0501デフォルトの名無しさん
2007/01/10(水) 23:14:43Haskellのリストは単方向リスト。
Cの文字列みたいに何らかのターミネータを持つ配列じゃない。
struct LIST{void*value;struct LIST*next;};
Cで言うと(struct LIST*)NULLが空リスト。
要するにHaskellはnextの値が空リストかどうかで終端を判断している。
君はvalueが特殊な値('\0')のときに終端になるのだと勘違いしている。
と、説明書いてみたけど、うーん自分でもこれじゃあ分かりくいな。どうかけばいいだろう。
0502デフォルトの名無しさん
2007/01/10(水) 23:34:08enum Tag { NIL, CONS };
struct Nil { Tag t; };
struct Cons { Tag t; void *head; union List *tail; };
union List { struct Nil nil; struct Cons cons; };
という感じでないか
0503デフォルトの名無しさん
2007/01/11(木) 03:18:200504デフォルトの名無しさん
2007/01/11(木) 06:47:50Cons → 1
↓
Cons → 2
↓
Nil
というような構造になっていて、Haskellコードではこれを 1:(2:[])
と表現しています。 [] はこの場合の Nil のことを表す記号です。
いちいち 1:(2:(3:(4:[]))) と書くのは面倒なので
[1,2,3,4] と書いてもよくて、これは 1:(2:(3:(4:[]))) と解釈されます。
さて、map f という関数は、関数 f をこの Cons の右側につながった値に
それぞれ適用する関数です。
したがって、上の 1:(2:[]) に map f を適用した結果は
Cons → f 1
↓
Cons → f 2
↓
Nil
となります。
map f を [] に適用するとどうなるかというと、 [] は
Nil
という構造なのでfを適用する値が一個もなく、したがって結果は
Nil
のままです。よって map f [] の結果は [] となります。
0505デフォルトの名無しさん
2007/01/11(木) 21:57:46SICPって読んだほうがいい?
0506デフォルトの名無しさん
2007/01/11(木) 22:08:52目的による。
何がしたいの?
0507デフォルトの名無しさん
2007/01/11(木) 22:36:40最近寝付きが悪いので…
0508デフォルトの名無しさん
2007/01/11(木) 22:39:11読むことを激しく勧める
0509デフォルトの名無しさん
2007/01/11(木) 22:47:17この手の専門書は、原書より訳本の方がいいよね?
へんてこな翻訳文体が心地よい眠りに誘うと期待
0510デフォルトの名無しさん
2007/01/11(木) 22:52:09よほどスラスラ英語を読めるのでもなければ
そんな訳でも訳の方がマシだと思う。
少なくともSICP程度の訳であれば。
0511デフォルトの名無しさん
2007/01/11(木) 22:54:46へんてこなのには違いないんだけど、なんか勝手に訳語作っちゃったり、痛さあふれる訳本です。
0512デフォルトの名無しさん
2007/01/11(木) 23:11:240513デフォルトの名無しさん
2007/01/11(木) 23:20:11偉い人が作って、みんながそれが正しいと思って使うようになるんだけど、
誰もその人の訳語を使わないし、そもそも新しい訳語を作れるほど自分は偉いんだ、
と思いこんでる身の程知らずのタコだから痛いんですよ。
0514デフォルトの名無しさん
2007/01/12(金) 20:49:230515デフォルトの名無しさん
2007/01/12(金) 21:14:22ただ議論がしたいからここを利用しているだけで、
なくなれば別のところにいくだけです。
0516デフォルトの名無しさん
2007/01/12(金) 21:24:320517デフォルトの名無しさん
2007/01/12(金) 21:35:57で良いんじゃねぇ?
もしくはHaskellで適当な掲示板作るとか。
出来ないかな。
俺は2ch潰れて欲しいな。
人文科学の観点から、これほど大きい掲示板が潰れると
どういう影響が出るか見てみたい。
まるで夕張が国の実験場になるように。
0518デフォルトの名無しさん
2007/01/12(金) 21:57:27個人的な立場で言うと、まじめにGoogle無くなるよりも困る
0519デフォルトの名無しさん
2007/01/12(金) 22:11:42ただ、専ブラの発明は偉大であると思ったので、
この方式自体は生き残るだろう。
ブログってRSSフィードを出力するのが増えてるけど、
専ブラで読める形式を出力するのってどうね?
とブログスレで提案したんだが、だれも作ろうとしない。
ああ、スレ違い
0520デフォルトの名無しさん
2007/01/12(金) 22:27:13無くて済むのならない方が良い。絶対に良い。
0521デフォルトの名無しさん
2007/01/12(金) 22:36:482chを毎日見る人間ってけっこう多いと思うぞ
インターネットと2chが1:1になるくらい
となるとブラウザと2chブラウザはわけて存在したほうがスッキリする
0522デフォルトの名無しさん
2007/01/13(土) 03:20:14文字
文字列
文字のリスト
文字列のリスト
の実感がイマイチわからねぇ。
関数の引数の型によって、文字のリストが文字列になったりその逆になったり
う〜ん。
あと、質問なんですけれども
多相型と型変数ってどこがちがうのでしょうか?
0523デフォルトの名無しさん
2007/01/13(土) 03:32:11オマエ、マチガエテル。
2ch ハ、インターネット ニ フクマレルカラ ソレジャ 2ch シカ リヨウシテイナイコトニナルネ。
2ch ブラウザ ガ アレバ ブラウザ イラナイネ。
0524デフォルトの名無しさん
2007/01/13(土) 04:21:070525デフォルトの名無しさん
2007/01/13(土) 04:57:05C言語はchar配列が,いわゆる「文字列」じゃん
Haskellは [Char] が「文字列」
あと多相型を表現する(書き表す?)ために使われるのが型変数でそ
0526デフォルトの名無しさん
2007/01/13(土) 05:23:400527デフォルトの名無しさん
2007/01/13(土) 07:04:55きっとインターネット以外のネットワークを使って2chにアクセスしてるんだよ。
0528デフォルトの名無しさん
2007/01/13(土) 10:21:050529デフォルトの名無しさん
2007/01/13(土) 11:26:21文字 Char
文字列 [Char]
文字のリスト [Char]
文字列のリスト [[Char]]
0530デフォルトの名無しさん
2007/01/13(土) 11:27:010531デフォルトの名無しさん
2007/01/13(土) 13:17:020532デフォルトの名無しさん
2007/01/13(土) 14:05:00l| -‐‐- |l
,イ」_ |ヽ_| l、
/└-.二| ヽ,ゝl
l ,.-ー\/. 、l
| /.__';_..ン、 ビ〜ィ〜ム かがーやーく♪
/ /<二> <二>!゙、
//--─'( _●_)`ーミヘ フラッシュバックに〜ぃ♪
<-''彡、 |∪| 、` ̄ ̄ヽ
/ __ ヽノ Y ̄) |
(___) Y_ノ
\ |
| /\ \
| / ) )
∪ ( \
\_)
ll ll
l| -‐‐- |l
,イ」_ |ヽ_| l、
/└-.二| ヽ,ゝl
l ,.-ー\/. 、l
| /.__';_..ン、 ヤツのかげーー♪
/ /<二> <二>!゙、
//--─'( _●_)`ーミヘ
<-''彡、 |∪| ミ __>
( (/ ヽノ_ |
ヽ/ (___ノ
| /
/ /\ |
( ( ヽ |
/ ) ∪
(_/
0533デフォルトの名無しさん
2007/01/13(土) 14:05:42_人人人人人人人人人人人人人人人_
> シャア♪ シャア♪ シャア♪ <
 ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
ll ll ll ll ll ll
l| -‐‐- |l __ l| -‐‐- |l __ l| -‐‐- |l __
,イ」_ |ヽ_| l、〈〈〈〈 ヽ ,イ」_ |ヽ_| l、〈〈〈〈 ヽ ,イ」_ |ヽ_| l、〈〈〈〈 ヽ
/└-.二| ヽ,ゝl.〈⊃ } /└-.二| ヽ,ゝl.〈⊃ }./└-.二| ヽ,ゝl.〈⊃ }
l ,.-ー\/. 、l | |. l ,.-ー\/. 、l | | l ,.-ー\/. 、l | |
| /.__';_..ン、! ! | /.__';_..ン、! !| /.__';_..ン、! !
/ /<二> <二>!゙、 // /<二> <二>!゙、 // /<二> <二>!゙、 /
//--─'( _●_)`ーミ /.//--─'( _●_)`ーミ / //--─'( _●_)`ーミ /
<-''彡、 |∪| / <-''彡、 |∪| / <-''彡、 |∪| /
/ __ ヽノ / / __ ヽノ / / __ ヽノ /
(___) / (___) / (___) /
0534デフォルトの名無しさん
2007/01/15(月) 22:00:100535デフォルトの名無しさん
2007/01/15(月) 22:04:01関数型言語の総合スレはこちらです↓
関数型言語Part IV
http://pc10.2ch.net/test/read.cgi/tech/1083649982/
0536デフォルトの名無しさん
2007/01/19(金) 01:52:30廃れてんなぁ
なんかHaskelニュースとかねーのか
0537デフォルトの名無しさん
2007/01/19(金) 09:31:310538デフォルトの名無しさん
2007/01/20(土) 19:04:510539デフォルトの名無しさん
2007/01/20(土) 21:06:220540デフォルトの名無しさん
2007/01/21(日) 08:45:34やさしいHaskellのp107から。
myIf :: Bool -> a -> a -> a
myIf True t e = t
myIf False t e = e
main = do myif (True) (putStrLn "then") (putStrLn "else")
という関数を定義して、このプログラムがthenだけ表示されれば、
アクションputStrLn "elseは評価されていないことが分かります。
とあるんだけれど、何が言いたいのか良く分からん。
このプログラムを実行したら、thenが表示されるのは当たり前じゃないのか?
これのどこが評価に必要な式だけが評価されることの証拠になるんだ?
Cの
if ( True == True){
printf("then\n");
}
printf("else\n");
とどこが違うんだ。
これも、printf("else\n");は評価されて無いぞ。
それともif文を実装した点に意味があるって事?
0541デフォルトの名無しさん
2007/01/21(日) 08:53:33int myif(int a, int b, int c) {
return a ? b : c;
}
int main() {
myif(1, printf("true"), printf("false"));
}
0542デフォルトの名無しさん
2007/01/21(日) 09:38:09うん、それもわかるよ。
でもそれだって結局ifの言い換えでしょう?
俺が聞きたいのは
main = do myif (True) (putStrLn "then") (putStrLn "else")
でthenが実行されるのは当然で、何がすごいのか分からないんだ。
これと遅延評価の何が関係有るの?
教えて、偉い人。
0543デフォルトの名無しさん
2007/01/21(日) 10:02:42Cには「中身が実行されないことがある構文」(ifとか)はあるけど、
「引数が評価されないことがある関数」はない。
例えば、Cでは、
f(4 / 0)
という式は、fがどんな関数であっても零除算でエラーだが、Haskellでは、
f (4 `div` 0)
がエラーになるかどうかはfに依存する。
同様に、三項演算子と同じはたらきをする「関数」はCでは実装できないが、Haskellではできる。
>main = do myif (True) (putStrLn "then") (putStrLn "else")
ややこしいことに、この例に限っていえば、遅延評価は関係ない。
たとえputStrLn "else"が評価されたとしても、それで「else」が出力される訳ではない。
これはHaskellのIOの話で、遅延評価とは別の問題。
だから、遅延評価の話をするときは、ややこしくなるのでIOの例を使わない方が良いと思う。
0544デフォルトの名無しさん
2007/01/21(日) 11:09:270545デフォルトの名無しさん
2007/01/21(日) 15:55:04http://tv.goo.ne.jp/contents/program/008/0004/20070122_0250/index.html
0546デフォルトの名無しさん
2007/01/21(日) 17:08:29ゴルァ!
0547デフォルトの名無しさん
2007/01/22(月) 00:20:55他のletの中とかならマッチしない時点でエラーが出ると思うのですが
なぜこのやりかたで絞込みができるのでしょうか?
内包表記が特別扱いされてるとか?
0548デフォルトの名無しさん
2007/01/22(月) 00:31:11リストはMonadPlusで、内包表記はdo記法の略記。
doの中でマッチングが失敗するとモナドのfailが呼ばれ、リストのfailはmzeroを返すから
その後に続く式が無効化される。
0549548
2007/01/22(月) 02:06:48Prelude> let hoge = zip [1,2,3,4,5] [True,False,True,True,False]
Prelude> do (n,True) <- hoge; return n
[1,3,4]
Prelude> hoge >>= \(n,True) -> return n
[1*** Exception: <interactive>:1:49-69: Non-exhaustive patterns in lambda
なるほど。特別扱いではあるけどユーザも使えるわけですね。
0550デフォルトの名無しさん
2007/01/22(月) 19:51:170551デフォルトの名無しさん
2007/01/22(月) 20:06:18は
E >>= \x -> case x of
P -> do REST...
_ -> fail "message"
の構文糖
0552デフォルトの名無しさん
2007/01/22(月) 23:45:48> doの中でマッチングが失敗するとモナドのfailが呼ばれ
というところが構文糖だけじゃないんじゃない?ということだと思う。
0553デフォルトの名無しさん
2007/01/22(月) 23:47:250554デフォルトの名無しさん
2007/01/23(火) 02:07:43[ e | p <- l, Q ] =
let ok p = [ e | Q ]
ok _ = []
in concatMap ok l
[ n | (n,True) <- zip [1,2,3,4,5] [True,False,True,False,False] ]
=> let ok (n,True) = [n]; ok _ = [] in concatMap ok (zip [1,2,3,4,5] [True,False,True,False,False])
意味はほぼ一緒だが
0555デフォルトの名無しさん
2007/01/23(火) 02:27:29Haskell98ではなくて、GHCではそうだね。
0556デフォルトの名無しさん
2007/01/23(火) 15:17:18update h x v y | x == y = v
| otherwise = lookup h y
という関数の定義に関して、
update :: Assoc a b -> a -> b -> Assoc a b
の第一パラメータとなっている、Assoc a b は、
update h x v y | x == y = v
| otherwise = lookup h y
という実装において、
Assoc a b の a が h に、 b が x に対応しているのでしょうか?
よろしくお願いします。
0557デフォルトの名無しさん
2007/01/23(火) 16:08:51type Assoc a b = a -> b
と定義してあると思うので、それを前提にする。
>Assoc a b の a が h に、 b が x に対応しているのでしょうか?
違う。仮引数の型は、
h :: Assoc a b
x :: a
v :: b
y :: a
これは、updateの型をAssocなしで書いてみると分かり易い。
update :: (a -> b) -> a -> b -> a -> b
h x v y
0558デフォルトの名無しさん
2007/01/23(火) 19:05:54返信ありがとうございます。
>これは、updateの型をAssocなしで書いてみると分かり易い。
>update :: (a -> b) -> a -> b -> a -> b
> h x v y
とのことですが、
update :: Assoc a b -> a -> b -> Assoc a b
という定義には、その
>update :: (a -> b) -> a -> b -> a -> b
> h x v y
↑
にあるような、y に相当するパラメータの指定が、
関数定義に存在していないのが理解できません。
これは何か特殊な仕掛けがあるのでしょうか?
0559デフォルトの名無しさん
2007/01/23(火) 19:07:50ずれてる。>>557をもう一度見返して。
0560デフォルトの名無しさん
2007/01/23(火) 19:35:24もっと単純な例を挙げる。
foo :: Int -> String -> Bool
という関数があるとする。これはもちろん二引数関数。
括弧を補って丁寧に書くと、この型は次のようになる。(納得できないならカリー化を復習すべし)
foo :: Int -> (String -> Bool)
ここで(String -> Bool)の部分を別名に置き換えても意味は変わらない。
type StringProp = String -> Bool
foo :: Int -> StringProp
こう書くとfooはいかにも一引数関数だけど、型は最初のfooと変わらない。
よって、実装を書く際は引数を二つ使える。例えば、
foo :: Int -> StringProp
foo n s = length s < n
ついでだが、
>関数定義に存在していないのが理解できません。
「update :: Assoc a b -> a -> b -> Assoc a b」みたいなのは型シグネチャといって、
ふつう定義とはいわないと思う。
0561デフォルトの名無しさん
2007/01/23(火) 19:54:150562デフォルトの名無しさん
2007/01/23(火) 20:58:580563デフォルトの名無しさん
2007/01/23(火) 21:09:000565デフォルトの名無しさん
2007/01/24(水) 01:49:280566デフォルトの名無しさん
2007/01/24(水) 07:48:460567デフォルトの名無しさん
2007/01/24(水) 18:11:510568デフォルトの名無しさん
2007/01/24(水) 20:47:370569デフォルトの名無しさん
2007/01/27(土) 22:31:06何を使うのがお勧め? GHCの付属モジュールにはないようなのだが。
とりあえず、socatという、STDIOをソケットにつなげるツールを
使ってwrapしてみようかとは思っているのだが。
そもそもHaskellでのネットワークプログラミングが、IOと同じ
要領でいいのかどうかも知らないけど。
0570デフォルトの名無しさん
2007/01/27(土) 22:58:460571デフォルトの名無しさん
2007/01/27(土) 23:10:12>GHCの付属モジュールにはないようなのだが。
Network.Socketじゃだめなのか?
0572デフォルトの名無しさん
2007/01/27(土) 23:18:27な!
http://haskell.org/onlinereport/
が全てだと勘違いしてたよ。どうもありがと。
0573デフォルトの名無しさん
2007/01/27(土) 23:18:40何を使うのがお勧め? GHCの付属モジュールにはないようなのだが。
0574デフォルトの名無しさん
2007/01/27(土) 23:27:34でも資料がほとんどないねぇ。
GHC用のGUIライブラリってwxHaskell, gtk2hsとかほかにも幾つかあるけど、
2006年中に新バージョンがリリースされたものって1つもないよね。
0575デフォルトの名無しさん
2007/01/28(日) 00:03:340576デフォルトの名無しさん
2007/01/28(日) 00:31:28http://www.haskell.org/ObjectIO/life.html
http://cvs.haskell.org/cgi-bin/cvsweb.cgi/fptools/hslibs/object-io/Examples/Life/
import Graphics.UI.ObjectIO
-- ghc hello.hs -package objectio -o hello.exe -optl "-Wl,--subsystem,windows"
main = startIO SDI () (openWindow undefined window) []
window = Window title controls attrs
where
title = "hello world"
attrs = [ WindowClose $ noLS closeProcess, WindowViewDomain dom ]
dom = Rectangle (Point2 0 0) (Point2 480 320)
controls = text :+: button
where
text = TextControl "Hello" [ControlPos (Center, Vector2 0 50)]
button = ButtonControl "World" [pos, onClick]
where
pos = ControlPos (BelowPrev, Vector2 (-20) 20)
onClick = ControlFunction $ noLS closeProcess
0577デフォルトの名無しさん
2007/01/29(月) 18:44:30開発が止まってるね。
「GTKへの移植は次期リリースで」っていうのを見て期待してたんだけど。
0578デフォルトの名無しさん
2007/01/29(月) 19:12:04気づいたらVisual Haskell 0.2が出てるんですが、
依然としてVisual Haskellさんは問題ありありな感じだったりします?
0579デフォルトの名無しさん
2007/01/29(月) 19:30:04もちろん、問題ありです。
現状では、Windowsでのプログラミング環境は、meadow + haskell-mode + GHCが一番使いやすいですね。
0580デフォルトの名無しさん
2007/01/29(月) 19:49:30問題のありそな処理系使うほどもっさりIDE好きでもないのでスルーしておきますわ
アリガトウ アリガトウ
0581デフォルトの名無しさん
2007/01/29(月) 20:08:20IDE好きでないとのことですが、
IDEならEclipseもHaskellをサポートしているようですよ。
0582デフォルトの名無しさん
2007/01/29(月) 20:25:26Eclipseも使う機会無くはないんですが冷静に考えると
haskellで大きいもの書くことがほぼ無いのでテキストエディタとghcで十分な感じです
0583デフォルトの名無しさん
2007/01/29(月) 20:31:52ttp://061196246067.cidr.odn.ne.jp/soutaro/20041004
> eclipseの標準入力がおかしいとか,実行ファイル名を指定できないとか,
> コンパイルオプションを指定できないとか,むきーってなる.
誰か、むきーってなった人いませんか?
0584デフォルトの名無しさん
2007/01/29(月) 20:51:18確かに、eclipseのhaskellプラグインも不完全だと思いました。
たとえば、内部でghciを起動したあと、そのプロセスを殺さずに、新たに内部でghciを起動すると、
前のghciのプロセスがそのまま残ってしまう、とか^^;
0585デフォルトの名無しさん
2007/01/29(月) 20:54:08自動インデント機能がおかしくなる場合があるのを見つけたので、
結局、haskell-modeに落ち着いたわけです。
■ このスレッドは過去ログ倉庫に格納されています