トップページtech
1001コメント325KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/04/29(木) 19:15:28
haskell.org
ttp://www.haskell.org/

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

過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
・2chの仕様により、行頭の半角スペースは表示されません。
 コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
0002デフォルトの名無しさん2010/04/29(木) 19:19:18
関連書籍
・Introduction to Functional Programming Using Haskell (2nd ed.)
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0134843460/
・Haskell: The Craft of Functional Programming
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0201342758/
・The Fun of Programming
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0333992857/
・The Haskell School of Expression: Learning Functional Programming Through Multimedia
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0521644089/
・入門Haskell
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4839919623/
・ふつうのHaskellプログラミング
 ttp://item.rakuten.co.jp/book/4052963/
・Programming in Haskell
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0521692695/
・Real World Haskell
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0596514980
0003デフォルトの名無しさん2010/04/29(木) 19:20:53
これは乙じゃなくて乙なんだからねうんたらかんたら
0004デフォルトの名無しさん2010/04/29(木) 19:24:23
関連スレ
・関数型言語Part5
ttp://pc12.2ch.net/test/read.cgi/tech/1252470706/
・【数学者】Haskellはクソ言語【オナニー】
ttp://pc11.2ch.net/test/read.cgi/tech/1128011645/
・純粋関数型言語Concurent Clean
ttp://pc11.2ch.net/test/read.cgi/tech/1075629340/
・関数型言語ML (SML, OCaml, etc.), Part 6
ttp://pc11.2ch.net/test/read.cgi/tech/1245017721/
・Lisp Scheme Part30
ttp://pc12.2ch.net/test/read.cgi/tech/1270897776/
・【入門】Common Lisp その7【質問よろず】
ttp://pc12.2ch.net/test/read.cgi/tech/1270370267/
・Emacs Lisp 3
ttp://pc11.2ch.net/test/read.cgi/tech/1191875993/
・【Lisp】プログラミング言語 Clojure【JVM】
ttp://pc12.2ch.net/test/read.cgi/tech/1255533519/
0005デフォルトの名無しさん2010/04/29(木) 19:25:57
・【.NET】F#について語れ【OCAML】
ttp://pc12.2ch.net/test/read.cgi/tech/1186030985/
0006デフォルトの名無しさん2010/04/29(木) 21:31:28
前スレ >>999 おねがい

Haskell: The Craft of Functional Programming

The Haskell School of Expression: Learning Functional Programming through Multimedia

The Haskell Road To Logic, Maths And Programming

洋書で分かりやすいのってどれですか?
0007デフォルトの名無しさん2010/04/29(木) 21:35:36
英語ができるならネットでチュートリアルをいくつか→RWHでいいよ
0008デフォルトの名無しさん2010/04/29(木) 21:41:11
>>7

http://www.haskell.org/haskellwiki/Tutorials

この辺ですね? ↓とか楽しそう

http://learnyouahaskell.com/
0009デフォルトの名無しさん2010/04/29(木) 21:55:18
なんか珍しく盛り上がってるな
こここんなに人いたんだな
0010デフォルトの名無しさん2010/04/29(木) 22:06:38
少人数が騒いでるだけ。
0011デフォルトの名無しさん2010/04/29(木) 22:11:08
しかもJSON分かり辛いって言われてもなあ。
あれはわかりやすいから普及したんだよ。
0012デフォルトの名無しさん2010/04/29(木) 22:21:02
>>11

まだやんのかw

>>7-8

ビデオも良いね

http://www.haskell.org/haskellwiki/Video_presentations
0013デフォルトの名無しさん2010/04/29(木) 22:45:51
>>6
分かりやすいの意味が分かりにくいが・・・

Craft の方は王道というか、全く持って普通の Haskell 本。
比較的広いトピックを丁寧に解説している。
教科書的で基礎がしっかり学べるから入門に良いと思う。

School は(ほぼ)グラフィックス処理を題材に
関数プログラミングのテクニックを解説している感じ。
だいたい、奇数章でテクニックの本質みたいなのを解説して、
偶数章でそれをグラフィックス処理に応用するみたいな。
ストリーミングの解説辺りから FRP が題材に出てきて面白い。
最後の方にロボット制御や音楽などが題材に出てくる。

Road は知らん。
PDF で読めるヤツとは違うものなんかな
0014デフォルトの名無しさん2010/04/29(木) 23:24:36
>>6
おっと、肝心の質問に答えてなかったな。

私にとっては Craft と School は理解し難くはなかった。
School の方が説明を端折ってる感は若干あった。
0015デフォルトの名無しさん2010/04/29(木) 23:30:03
Haskellよりも本を読むことが目的になってるように思えるんだが、みんなそんなに読みまくってるのw?
0016デフォルトの名無しさん2010/04/29(木) 23:35:09
>>15
> Haskellより

意味が分かりません。
明瞭な言葉で語ってください。
0017デフォルトの名無しさん2010/04/29(木) 23:56:23
>>16
Haskell でのプログラミング中に起きた問題の解決よりも、とか、
Haskell でプログラミングすることよりも、
という様な感じの意味だろ。
それくらい文脈を考慮して察してやれよ。
0018デフォルトの名無しさん2010/04/30(金) 00:04:03
>>13-14

THX

Craftかなとも思いますが、>>7のいうようにネット上のチュートリアルとか
リファレンスをまず漁ってみます
0019デフォルトの名無しさん2010/04/30(金) 00:59:54
本を読むのも悪くないと思うけどな
もちろん練習も必要だが、その前にインプットだろ
0020デフォルトの名無しさん2010/04/30(金) 01:01:46
>>18
Craftは来年に新版が出る、かもしれない
0021デフォルトの名無しさん2010/04/30(金) 01:08:03
そことそこ
推薦図書スレへ帰れ
0022デフォルトの名無しさん2010/04/30(金) 01:10:06
>>15>>19な。
0023デフォルトの名無しさん2010/04/30(金) 01:24:34
日本語が不得手な人が混ざってるね
0024デフォルトの名無しさん2010/04/30(金) 02:18:23
>>23
どの人?
0025デフォルトの名無しさん2010/04/30(金) 02:30:28
RWHは難しいというか、話題が章内で完結していないので入門書やハンドブックとして適切じゃない。
知りたい項目を目次で調べてそのページを開いても、その章の始めの方の分かりづらい例題を理解して、さらに章をまたいで読まないといけない。

例えば「Doc」を調べようとして目次を開いたら267ページが出るけど、Docの説明があるのは結局117〜127ページで、JSONの例題の説明とPrettifyの説明も読まなければならない。

個人的には、この本じゃなくHaskellについてのことだけど、CやJavaから入った人には、やっぱり変数と関数がごっちゃになってるのは分かりにくい。
229ページの最後の行の liftP q f k w x y z とかシグネチャとの対応がどうなってるのか本を何分かにらまないと理解できない。

本が悪いというより、ただ単に、本をさくさく読みたい人向けの本じゃないってだけの話。
0026デフォルトの名無しさん2010/04/30(金) 04:00:36
伝説のPHP作者「Rasmus Lerdorf」名言集を聞くと嫌PHP厨がファビョる
・今のPHPを作ったのは、何十人もの開発者ですよ。私は1人目の開発者だったに過ぎません。
・問題を解くのが好きなだけで、プログラミングは大嫌いです。
・いかにプログラミングを避けるかを考えていたら、コードを再利用するためのツールとしてPHPができました。
・PHPは、歯ブラシみたいなものですね。毎日使うものですけど、だから何でしょう?誰が歯ブラシの本なんて読みたがります?
・パーザを書くのは苦手です。本当にダメなんです。今でもね。
・PHPには「protected属性」も「仮想メソッド」もありますよ。情報学科の教官が「重要だ」っていうやつは何でもね。僕自身は、こんなものどうでもいいと思ってますけど。
・プログラミングを好む人がいるのは知ってますが、全く理解できないですね。
・僕はホンモノのプログラマではありませんから、やっつけ仕事ですよ。ホンモノのプログラマは、「動いてるように見えるけど、メモリリークだらけじゃないか。直す必要があるかもね」なんて言うでしょう?僕なら、10リクエストごとにApacheを再起動しますね。
・いえ、メモリリークはちゃんと気をつけてますよ。でも、プログラミングってほんとクソだなと思いますね。
・プログラミング言語を作るつもりはありませんでした。どうやって作るのかも知りませんし。論理的に必要だと思われるものを足していっただけなんです。
・僕の発言に怒ってる人がいるようですね。僕がプログラマとしてひどいのは認めますけど、でも、多分あなたたちよりマシだと思いますよ(笑)。
0027デフォルトの名無しさん2010/04/30(金) 05:40:06
>>26
同意できるな
Haskellプログラマは最適化なんて興味ないだろ
仕様を記述できればいい
0028デフォルトの名無しさん2010/04/30(金) 05:47:16
>・今のPHPを作ったのは、何十人もの開発者ですよ。私は1人目の開発者だったに過ぎません。
GHCを作ったのも多数の開発者だな。
>・問題を解くのが好きなだけで、プログラミングは大嫌いです。
まさしくHaskellだな。
>・いかにプログラミングを避けるかを考えていたら、コードを再利用するためのツールとしてPHPができました。
Haskellは再利用性が高いな
>・PHPは、歯ブラシみたいなものですね。毎日使うものですけど、だから何でしょう?誰が歯ブラシの本なんて読みたがります?
Haskellの本は少ないな
>・パーザを書くのは苦手です。本当にダメなんです。今でもね。
Parsecか
>・PHPには「protected属性」も「仮想メソッド」もありますよ。情報学科の教官が「重要だ」っていうやつは何でもね。僕自身は、こんなものどうでもいいと思ってますけど。
Haskellにはプログラミング言語の研究者が重要だという奴は何でもあるな。
>・プログラミングを好む人がいるのは知ってますが、全く理解できないですね。
理解できないな
>・僕はホンモノのプログラマではありませんから、やっつけ仕事ですよ。ホンモノのプログラマは、「動いてるように見えるけど、メモリリークだらけじゃないか。直す必要があるかもね」なんて言うでしょう?僕なら、10リクエストごとにApacheを再起動しますね。
俺の書いたHaskellプログラムもやっつけ仕事だな。スペースリークだらけだがnが小さいので問題ない
>・いえ、メモリリークはちゃんと気をつけてますよ。でも、プログラミングってほんとクソだなと思いますね。
同意だな
>・プログラミング言語を作るつもりはありませんでした。どうやって作るのかも知りませんし。論理的に必要だと思われるものを足していっただけなんです。
俺もHaskellがあれば作る必要はないと思う
>・僕の発言に怒ってる人がいるようですね。僕がプログラマとしてひどいのは認めますけど、でも、多分あなたたちよりマシだと思いますよ(笑)。
まあ、Javaしかできない人よりはましだな
0029デフォルトの名無しさん2010/04/30(金) 06:42:05
あちこちにコピペ投下するようなバカを相手にしてはいけない
0030デフォルトの名無しさん2010/05/01(土) 22:51:00
code.haskell.org is down?
0031デフォルトの名無しさん2010/05/01(土) 23:09:19
yp
0032デフォルトの名無しさん2010/05/02(日) 10:56:37
脈略ないけど、Haskellでは
余データ==プログラム
という意味合い?
0033デフォルトの名無しさん2010/05/02(日) 12:03:28
Haskellではcodataはclassに相当するもんだと思う
0034デフォルトの名無しさん2010/05/02(日) 12:33:18
余データ(codata)って何?
興味ある
0035デフォルトの名無しさん2010/05/02(日) 14:05:03
モナドはたしかデータ、余データ(codata)に関する理論じゃなかったっけ。
なんでそれがリストモナドとかと関係するのか全くわからなかったけど。
0036デフォルトの名無しさん2010/05/02(日) 14:28:43
>>34
データの双対
0037デフォルトの名無しさん2010/05/02(日) 14:58:55
>>36
ごめん、まだ分かんない・・・
ググってもなかなかそれらしい記事に当たらないし(キーワードがまずいのか)。

codata が class に相当するのだとしたら、data は何に相当するの?
そしてそれらは、どのような事柄に関して双対関係があるの?
0038デフォルトの名無しさん2010/05/02(日) 15:14:27
>>37
>そしてそれらは、どのような事柄に関して双対関係があるの?
それこそ自然な同型になるようにするためだろう。
じゃないと取り扱いづらいし双対関係作る意味がないと思う。
0039デフォルトの名無しさん2010/05/02(日) 15:16:13
なんだか閃いた。>>37 thx!
0040デフォルトの名無しさん2010/05/02(日) 15:47:45
>>38
質問の仕方が悪かったかも。

Wikipedia によると、双対は
2つの対象がある意味で互いに「裏返し」の関係にあるというようなニュアンスがあるという。

これを踏まえて2つ質問があります。

・今回の件(Haskell)において、2つの対象の一方は class ではないかと意見が出た。
ではもう一方は何に相当するのか。

・ある意味で互いに裏返しの「ある意味」というのは、
今回の件(Haskell)では何に当たるのか。
0041デフォルトの名無しさん2010/05/02(日) 18:41:05
class宣言がinstanceの型からADTへの射だとしたら
その矢印が反対のものはADTからinstanceの型への射
ならdataはinstance宣言になるのか?なんかしっくりくるようでこない
0042デフォルトの名無しさん2010/05/02(日) 23:31:11
質問なんですが、今RWHを読んでいるのですが、putStrLnの後に $ がある場合と
無い場合がありますよね?
これってputStrLnの引数が文字列リテラルだけの時は要らなくて、文字列++変数
みたいな時には要るということなのでしょうか?

よろしくお願いします。
0043デフォルトの名無しさん2010/05/02(日) 23:36:33
>>42
初学者の方ですね。
($)演算子(関数)は、第一引数を第二引数に適用する関数です。
($)がなくても括弧を駆使すれば関数は書けますが、
($)を使うと綺麗に書ける場合が多いのです。
0044デフォルトの名無しさん2010/05/02(日) 23:45:09
>>43

ありがとうございます。

"($)演算子"でググればよかったんですね。

f1(f2(f3(arg))) → f1 $ f2 $ f3 $ arg

ttp://blog.livedoor.jp/kikwai/archives/51588251.html

分かりましたー
0045デフォルトの名無しさん2010/05/02(日) 23:46:36
> これってputStrLnの引数が文字列リテラルだけの時は要らなくて、文字列++変数
みたいな時には要るということなのでしょうか?
結果としてはそうなのだが、演算子の結合の問題。
0046デフォルトの名無しさん2010/05/02(日) 23:51:06
>>42

 putStrLn "foo"
の場合、[Char]型の値に、[Char]->IO ()型の関数([Char]を引数に取る関数)が適用されているので型エラーは起きない。
 putStrLn "foo" ++ "bar"
の場合、関数適用は演算子の適用よりも優先度が低いので
 (putStrLn "foo") ++ "bar"
と解釈されてしまって、まぁ、直感的にもおかしい。正確にいうと、IO ()型の値と"bar"型の値にリスト連結演算子(++)::[a]->[a]->[a]が適用されているので型エラーになる。

この型エラーを回避するためには、
 putStrLn ("foo" ++ "bar")
と書いて、"foo"と"bar"に先に(++)を適用するようにすれば良い。

演算子($)は、
 f $ x = f x
と定義されている演算子で、他のどの演算子よりも優先度は低いが、関数適用よりは高い優先度を持っている。

だから、
 putStrLn $ "foo" ++ "bar"
と書くと、
 putStrLn $ ("foo" ++ "bar")
と解釈され($は++より優先度が低いから)
 putStrLn ("foo" ++ "bar")
と解釈される($の定義より)。よって、これでも問題は解決される。

この程度だと括弧()を使って優先度を操作するのと$を使うのとで大した違いはないけど、
 sortBy f5 (map f4 (groupBy f3 (filter f2 (map f1 list))))
みたいな式を書きたいときとか、括弧()の代わりに$を使うと読みやすくなる。
0047462010/05/02(日) 23:51:50
うわwww オレ、はずかし。
0048デフォルトの名無しさん2010/05/02(日) 23:58:19
>>46-47

いえいえ凄く分かりやすいです。ありがとうございます。
0049デフォルトの名無しさん2010/05/03(月) 00:08:14
たぶん、>>48>>46 の恥ずかしさが分かっていないと思う。
0050デフォルトの名無しさん2010/05/03(月) 01:57:07
一応、Haskellでは関数合成と適用を組み合わせるスタイルが推奨されているようだ。

g x y = f1 . f2 . f3 $ x * y
0051デフォルトの名無しさん2010/05/03(月) 09:43:50
誰も突っ込まないので言ってみる

>>46
> 演算子($)は、
>  f $ x = f x
> と定義されている演算子で、他のどの演算子よりも優先度は低いが、関数適用よりは高い優先度を持っている。

関数適用は何よりも優先順位が高い(最高位)ですよ。
関数適用以上の優先順位のものは Haskell プログラマは定義できないです。
0052デフォルトの名無しさん2010/05/03(月) 12:47:45
>>51
否。遅延評価(左最外簡約)なhakellは関数適用が最後。
4 * (3 + 2)とかは
=>4 * 3 + 4 * 2
=>12 + 8
=>20
となる。infixで指定する数値は高ければ高いほど後に回される。
f x y = x * y
g y = 2 * y
としてf x $ g yを評価するとき、$が最初に評価されないといけない。
じゃないとエラーになるでしょ?
0053デフォルトの名無しさん2010/05/03(月) 12:53:11
結合則と評価順をごっちゃにしてはいけない
0054デフォルトの名無しさん2010/05/03(月) 13:34:14
>>53
そっか、>>46 は「先に評価される=優先度が高い」という話をしてたのか。

それを俺の方が結合度の話をしていると勘違いして、
>>51 で間違った指摘をしてしまったのか。

すまんかった、申し訳ない。
ちなみに >>49 も俺、本当に悪い
0055デフォルトの名無しさん2010/05/03(月) 22:59:42
GHCIで正規表現を使ってみたくて
Prelude> :module +Text.Regex.Posix
ってやったんですが、
Could not find module `Text.Regex.Posix':
Use -v to see a list of the files searched for.
と出てモジュールをロードできません。
OSはDebian lennyです(WinXP上のVMPlayer上で動かしています)
これはモジュールがインストールされていないということでしょうか?
対処方法を教えてください。お願いします。
0056デフォルトの名無しさん2010/05/03(月) 23:16:40
>>55
とりあえず、モジュールがインストールされているかどうかを調べてみたらどうだ?
0057デフォルトの名無しさん2010/05/03(月) 23:21:48
>>56

すいません 本来どこに入ってるんですか?
/usr/lib/ghc-6.8.2 下とか /usr/lib/haskell-utils あたりを今探している
んですが・・・

該当するライブラリは見つけたっぽいんですけど↓
http://hackage.haskell.org/package/regex-posix
どこにインストールすればいいのか分かりません。
0058デフォルトの名無しさん2010/05/03(月) 23:37:33
ghc-pkg list
でインストール済みパッケージの一覧
0059552010/05/03(月) 23:54:42
$ ghc-pkg list
/usr/lib/ghc-6.8.2/package.conf:
Cabal-1.2.3.0, array-0.1.0.0, base-3.0.1.0, bytestring-0.9.0.1,
containers-0.1.0.1, directory-1.0.0.0, filepath-1.1.0.0,
(ghc-6.8.2), haskell98-1.0.1.0, hpc-0.5.0.0, old-locale-1.0.0.0,
old-time-1.0.0.0, packedstring-0.1.0.0, pretty-1.0.0.0,
process-1.0.0.0, random-1.0.0.0, readline-1.0.1.0, rts-1.0,
template-haskell-2.2.0.0, unix-2.3.0.0

一覧には無いっぽいですね。
0060デフォルトの名無しさん2010/05/03(月) 23:56:49
>>59
正規表現ライブラリはいくつもあるので、Hackageで探してインストール。
0061デフォルトの名無しさん2010/05/03(月) 23:58:22
>>59
訂正。ライブラリは見つけたようなので、cabalでインストール。cabal-installがインストールされていなければ、まずそれをインストール(ぐぐればダウンロード元が見つかる)。
0062デフォルトの名無しさん2010/05/04(火) 13:10:02
Linuxならディストロのパッケージを入れる方がいい
aptとかで探せば出てくるはず
0063デフォルトの名無しさん2010/05/04(火) 13:28:39
>>62
ディストロのパッケージだと何故か上手くいかない、
という相性の問題が以前からたびたび出てるよ。
Debian 系の報告が比較的多い感じ。

Cabal 使っておけば安全だし、他の OS でも知識が生きると思う。
0064デフォルトの名無しさん2010/05/04(火) 13:35:36
そりゃあDebianにレポートすべきでは。
0065デフォルトの名無しさん2010/05/04(火) 18:07:52
ディストロ系のパッケージだとpure Haskellでないライブラリも確実に処理してくれる半面、
バージョンのチェックが怪しいかもしれんね。
Deb系のパッケージシステムのことはよく知らんが、Cabalみたいに上限バージョンのチェックまでしてくれるのだろうか?
それにDebianのレポジトリに入っているパッケージは全体的に古い
0066552010/05/04(火) 18:47:03
cabal-installを入れようとしたら、timeライブラリが無いと言われ
timeを入れようとしたら、baseライブラリが古いと言われ、baseを
アップデートしようと調べたらGHC自体をアップしないと無理と
書いてあったので、最新のGHCをソースからインストールしたら、
Text.Regex.Posixも一緒に入り、最初の問題が解決しました。
0067デフォルトの名無しさん2010/05/04(火) 19:49:24
最初からCabalでなくPortageでも採用してれば今こんなに
面倒なことにはなってなかったはず
0068デフォルトの名無しさん2010/05/04(火) 23:51:23
Cabal に削除コマンドが未だに無いのも不思議だ
0069デフォルトの名無しさん2010/05/05(水) 00:18:06
Cabalは参照透明性を維持します。
破壊更新・削除はできません。
0070デフォルトの名無しさん2010/05/05(水) 00:38:55
>>68
ていうか、Cabalはbuild architectureだから。
パッケージ管理システムではなく、makeの置き換えだと考えるべき。
パッケージ管理はghc-pkgがやっている。
0071デフォルトの名無しさん2010/05/05(水) 00:40:59
書店でざっと見て来ました。前スレだったかにハンドブックを求めていた人がいたと思うけど、
プログラミングHaskell (ISBN-10: 4274067815)で良い気がした。

RWHは長いからタイトル通り実用例題集くらいに思って、これと両方持ってると良さそうですな。
0072デフォルトの名無しさん2010/05/05(水) 03:08:32
makeはautomakeでuninstallルールの自動生成できるじゃん
0073デフォルトの名無しさん2010/05/05(水) 07:38:52
>>72
ghc-pkg unregisterではだめか?
0074デフォルトの名無しさん2010/05/05(水) 11:45:39
>>73
依存性を考慮するのがメンドイ

ライブラリAが、ライブラリBをインストールした時に同時にインストールされたものか、
それともライブラリBをインストールする前からインストールされてたのか、
すぐに忘れる。

あと、ライブラリやドキュメント、実行ファイルを消すのがメンドイ
まぁ、これはインストールされてる場所は決まってるから、作業は簡単なんだが。
0075デフォルトの名無しさん2010/05/05(水) 13:40:14
"cabal update" をしたら次のメッセージが表示された

-----
(略)
Note: there is a new version of cabal-install available.
To upgrade, run: cabal install cabal-install
-----

なので指示通り "cabal install cabal-install" をした。
しかしこのコマンドはエラーメッセージも表示されず完了したのに、
"cabal info cabal-install" をすると、次のように表示される。

-----
(略)
Latest version available: 0.8.2
Latest version installed: [ Unknown ]
(略)
-----

何故?

[環境]
Windows7
Haskel Platform 2010.1.0.0
0076デフォルトの名無しさん2010/05/05(水) 14:39:38
cabal --versionの結果は?
0077デフォルトの名無しさん2010/05/05(水) 17:59:08
>>76
cabal-install version 0.8.1
using version 1.8.0.2 of the Cabal library

です。
0078デフォルトの名無しさん2010/05/05(水) 18:33:39
とりあえずhackageからtarball落して解凍して手動で入れてみれば?
0079デフォルトの名無しさん2010/05/05(水) 19:34:46
>>78
手動で入れても相変わらず同じ結果だった。
ではビルドされた cabal.exe はどこに行ったのかと思って検索してみたら、
"C:\Users\...\AppData\Roaming\cabal\bin" にあった。

"cabal --global install cabal-install" でインストールしてみたところ、
"C:\Program Files\Haskell\bin" にインストールされた。

以前のバージョンの Haskell Platform についてきた Cabal では、
--global を指定しなくても Program Files の方にインストールされてたんだけど、
仕様が変わったのでしょうか。
それとも、うちだけ?

あと、これでも "cabal info cabal-install" をすると、
相変わらず Latest version installed: [ Unknown ] と表示される。
何が何だか分かんなくなってきた。
もう少し調べても分からなかったら、Haskell Platform を再インストールしてみる。
0080デフォルトの名無しさん2010/05/05(水) 19:58:54
>>75
その現象には私も直面した。
globalとuserの両方にcabalがあり、userのほうが新しいcabalのはずなのだが、
参照されているcabalは古いバージョンのようだ。
私はHaskellのライブラリを全部削除してからGHCを再インストールした。
もっとうまい方法はないだろうか。
0081デフォルトの名無しさん2010/05/06(木) 06:48:09
cabalには正しくアップグレードできないというバグがあるのかもしれない
0082デフォルトの名無しさん2010/05/06(木) 12:07:33
うちではtimeとconvertibleが百年戦争やってるよ
0083デフォルトの名無しさん2010/05/07(金) 20:58:39
Haskell Platform 2010.1.0.0 を再インストールしたけど、だめだった。
他のライブラリは "cabal install" でインストールしたら
ちゃんと "cabal info" に反映されるのに、
cabal-install だけは反映されない。

こういうモンだと思って、もう諦めた。
0084デフォルトの名無しさん2010/05/07(金) 22:33:07
cabalは変な動作をするね
モジュールの依存関係を正しく理解してないことがしばしばある
しかも、出来上がったパッケージが稀に壊れてたりもする
cleanしてからビルドするとちゃんとしたものが出来るけど、それってどうなのよ
0085デフォルトの名無しさん2010/05/07(金) 23:28:40
Haskellにはよくあること
0086デフォルトの名無しさん2010/05/08(土) 01:41:52
cabalでのビルドにおけるトラブルの主因は、依存ライブラリを
パッケージごとに管理しているせいではないか。

このパッケージごとの名前空間分離は、ファイル名ベースの管理と違って、
重複を避けやすい反面失敗しやすい、許容範囲の狭い方法だろう。
実験的なソフトウェアが多いHaskellにおいては、予想外の動作をするよりは
動作しないほうが安全であり、Cabalは望ましい設計だということができるだろう。

一方で、Haskellをプロダクションに使うには、ビルドを確実に処理するための
特別なサポートが必要だろう。
0087デフォルトの名無しさん2010/05/08(土) 11:48:44
PDFファイル所在のメモ
ttp://openpdf.com/ebook/replicate-haskell-pdf.html
0088デフォルトの名無しさん2010/05/09(日) 00:02:15
型Bを型Aへ変換する関数と、型Cを型Aへ変換する関数を同じ名前にしたいです。
型Bと型Cを、型Aへ変換する関数を持つクラスのインスタンスにするしかないでしょうか。
0089デフォルトの名無しさん2010/05/09(日) 00:35:53
>>88
モジュールを分けて修飾インポート。
しかしそもそも同じ名前にすべき理由は何?
0090デフォルトの名無しさん2010/05/09(日) 00:37:11
Example
let a = B.toA b
a' = C.toA c
0091デフォルトの名無しさん2010/05/09(日) 18:06:43
> and []
True
> or []
False

GHCでこんな結果がでるんですが、これは意図してこのように定義されて
いるのでしょうか? どっちも False か、どっちもエラーかの方が妥当な
気がするのです。
0092デフォルトの名無しさん2010/05/09(日) 18:26:48
それはどちらもそう定義してある。

and (x:xs) = x && and xs
or (x:xs) = x || or xs

その2つとこれ見て実際に手を動かしてみたら分かると思うな。
0093デフォルトの名無しさん2010/05/09(日) 19:53:22
鳳たんが書いたHaskellの紹介
http://feather.perl6.nl/~audreyt/osdc/haskell.xul
を読もうとしていますが唯一、Firefox/Linuxでのみ読めました。
他のブラウザは、拡張子がわからない(IE、Chrome)とか、
ソースがそのまま表示されるとか(Firefox/Win)です。

Linuxで読めればいいかというと、レイアウトが乱れて読めない場所があったりします。

どうしたらいいでしょうか?
0094932010/05/09(日) 20:12:20
> 他のブラウザは、拡張子がわからない(IE、Chrome)とか、
> ソースがそのまま表示されるとか(Firefox/Win)です。

Mac (Safari, Firefox)でも似たようなものです。
0095デフォルトの名無しさん2010/05/09(日) 21:28:24
>>89,90
ありがとうございます。

いや、今のところ特にそれで困っているという状況ではないです。
単に C/C++ などのようなオーバーロードはできるかなと思っただけです。


0096デフォルトの名無しさん2010/05/09(日) 22:49:26
>>92
プログラミングHaskel 6章の課題をやっていて、and'という名前で、
まさにそのように定義しました。でも、この定義は and' [] の場合
を決めていませんし、実際にやってみたら、エラーになりました。
ライブラリ関数 and もそうなんだろうと思って試してみたら、>>91
の結果が返ってきました。

それで質問をさせてもらったのでした。
0097デフォルトの名無しさん2010/05/09(日) 23:23:27
>>96
GHC ライブラリ リファレンスの Prelude.and 関数や or 関数の説明からは、
次のように定義されているっぽいと推測できる。

and 関数は有限リスト、無限リストを問わず、
どこかにひとつでも False があると分かれば False を返す。
それ以外は True を返す(が、そのためには有限リストで無ければならない)。

or 関数は有限リスト、無限リストを問わず、
どこかにひとつでも True があると分かれば True を返す。
それ以外は False を返す(が、そのためには有限リストで無ければならない)。

なので、and [] は「それ以外」の条件に当てはまり True となる。
or [] も「それ以外」の条件に当てはまり False となる。
0098デフォルトの名無しさん2010/05/09(日) 23:34:52
ここらは(代表的な)Lispのand/orとまったく同じ定義
さすがにhaskellではhead [] /= []かつtail [] /= []だけど
0099デフォルトの名無しさん2010/05/09(日) 23:45:53
0個の元の論理積の値を,論理積の単位元 True で定義しておくと,0個以上の元の論理積を再帰的に定義できる.
0!(0の階乗)を 1と定義するのと同じ.
0100912010/05/09(日) 23:57:03
ぼんやりと心がわかったような気がしました。
いただいた回答を参考に、もうちょっと考えてみたいと思います。

回答してくださったみなさんありがとうございます!
0101デフォルトの名無しさん2010/05/10(月) 16:38:55
case中全部から見えるwhere節が欲しい時がある
■ このスレッドは過去ログ倉庫に格納されています