1 名前:デフォルトの名無しさん [2012/10/17(水) 08:08:28.97 ] 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/ Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/ Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/ Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/ Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/ Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/ Part17 ttp://toro.2ch.net/test/read.cgi/tech/1325510368/ Part18 ttp://toro.2ch.net/test/read.cgi/tech/1331902463/ Part19 ttp://toro.2ch.net/test/read.cgi/tech/1340760070/
263 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:24:41.98 ] www.haskell.org/ghc/docs/latest/html/libraries/base-4.6.0.0/Prelude.html#t:Functor Haskellでいう関手はこれ 圏論の関手は他を当たってね!
264 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:29:59.09 ] >>261 マジすか 複雑な事情っすね 実践よりもHaskell型システムの理解に的を絞ったサイトないっすか?
265 名前:デフォルトの名無しさん [2012/11/05(月) 19:30:38.26 ] >>262 map を関手の一つと考えると、関手から自然変換まで簡単に理解できる 簡単に理解できる = 毎日30分定義とにらめっこして1週間ぐらい悩むと分かる
266 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:41:26.25 ] >>263 Functor クラスが関手のことなら、なにも漢字で書かなくてもよくない? unboxed vector は Functor クラスのインスタンスじゃないから、 と言う方がはるかに分かりやすいというか、ストレートだと思うんだが と感じるのは私だけ?
267 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:44:20.77 ] 知らんがな
268 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:52:07.99 ] >>266 定着してる訳語があるのに横文字や片仮名を使うのは宗教上の理由でできんのです、ごめんなさい
269 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:55:12.71 ] >>268 ギャグとしてはあまり面白くない
270 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:02:00.78 ] 女だ! このスレに女が紛れ込んでるぞぉーっ! 魔女を焼き払えーっ!
271 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:04:44.17 ] 一人称を私にすると賢そうに見えるの法則
272 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:14:25.77 ] ん? Functor クラスそのものは関手なの? Functor クラスがたまたま持つ性質(種数やfmap関数など)を持つものが関手なの? たとえば Applicative なども関手? Functor クラス自身とそのインスタンスのみが関手? Functor クラスそのもののみが関手で、そのインスタンスは集合の要素みたいなもの? わけが分からなくなった・・・ >>271 一人称「私」なんて誰でも使うから、賢そうに見える要素にならないでしょ
273 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:20:11.08 ] >>272 二番目が一番近いと思う
274 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:24:02.72 ] >>273 そうだとすると、>>268 の言う「定着してる訳語」っておかしくないか? >>268 の言い方だと Functor の日本語訳が関手である、 と言っているように聞こえる
275 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:29:18.54 ] >>274 圏論でFunctorの訳語が関手だから、それ以外に訳しようがない
276 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:33:04.72 ] 圏論でFunctorと、haskellのFunctorクラスは同じもの?
277 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:38:18.43 ] わかった 今後Haskellのファンクタの意味で関手といいたい場合 いわゆる関手 と書くことにしよう
278 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:39:30.80 ] >>276 HaskellのFunctorクラスのインスタンスはある種の(圏論的な意味の)関手(の対象部分)になってる 具体的にはHask圏からHask圏への関手 逆に、ある型構築子が(圏論的な意味の)関手になっていてもFunctorのインスタンスとは限らない たとえば>>258 のunboxed vectorがそう
279 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:48:17.32 ] >>278 じゃあ、HaskellのFunctorクラスを安易に関手と言うのは、 文脈によっては危険じゃないか? どの文脈だと危険か正しく理解してる奴しか使えない訳語な感じがするが
280 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:53:08.78 ] >>279 もちろん混乱の原因になることはあるけど、 *Functorのインスタンスを関手と呼ぶ のをその論法で禁止したら、 *Monadのインスタンスをモナドと呼ぶ *Monoidのインスタンスをモノイドと呼ぶ *Numのインスタンスを数値型と呼ぶ あたりも言えなくなって不便じゃないか
281 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:53:32.47 ] 単位元と結合律を保存する高階関数は関手 という理解は正しいでしょうか?
282 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:59:21.14 ] >>281 「恒等関数と関数結合を保存する高階関数」と言った方が良さそう
283 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 21:09:19.73 ] 関手はFunctorではなくfmapじゃないのん?
284 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 21:12:51.87 ] >>280 なるほど、そう言われると、たしかに不便だな。 Haskell の話をしていると判りきっている時には Monad のインスタンスはモナドと言いたい。 (個人的にはFunctorのインスタンスはファンクタと言いたいが) でも、Haskell の話をしてるときに、いきなり圏論が姿を現し、 そのまま議論が進んでいくと、ややこしくならない? そういうシーンをこのスレでよく見かける
285 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 22:05:15.91 ] 271 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/05(月) 20:04:44.17 一人称を私にすると賢そうに見えるの法則 賢くみられたいからHaskellやるという法則
286 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 22:11:23.06 ] 賢く見られたいからHaskellって・・・ 賢く見られたいんならMITで博士号取るだろ普通
287 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 22:47:19.80 ] >>286 ギャグとしてはあまりおもしろくない
288 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 22:51:06.92 ] >>287 一度目はいいけど、二度やると冷める もう止めた方がいいと思うよ
289 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 23:09:11.87 ] GHC 7.6.1 の ghci 上で Conduit が動かない ghci 上で Data.Conduit系モジュールがロード処理されると、 エラーが出る。 Loading package conduit-0.5.2.7 ... linking ... <interactive>: internal error: R _X86_64_PC32: High bits are set in 7fefb411866 for _close (GHC version 7.6.1 for x86_64_unknown_mingw32) Please report this as a GHC bug: www.haskell.org/ghc/reportabug これはバグ? 俺英語書けなくてバグ報告できないんだが、詰んだかな
290 名前:289 mailto:sage [2012/11/05(月) 23:10:49.65 ] あ、ちなみに ghc でコンパイルすれば問題なく実行できるから、詰んではないか でも色々実験して勉強しようと思ってたんだが、ghci 使えないとなると、 かなり面倒になるなぁ・・・
291 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 23:12:17.93 ] >>281-283 関手とはある圏の対象と射をもう一つの圏(自己関手の場合は同じ圏)に移すものだから、 Functorのインスタンスとfmapセットで関手と言うのが一番近い
292 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 23:37:08.23 ] >>286 =こいつ図星 こいつ>>285 のレスに図星しすぎれレスしてやがる だいたいのやつは必死に悔しくても反応したら負けっていう考え持ってるから食いつかない こいつは食いついた正直者
293 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 23:41:21.48 ] >>290 たぶんWindows固有の問題 LinuxかMacを使うとか、Windowsなら仮想マシン上でLinux使えば、問題が出ない可能性が高い この手の開発はUnix系メインでやっててWindowsはオマケのことが多いから、 細かいとこで目の行き届かない不具合があったりする
294 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 23:41:35.04 ] 俺、Haskellぐらいしかまともに書ける言語ないんだが、 正直それはそれで非常に恥ずかしい思いをしている
295 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 23:41:49.81 ] ○○をしたら負けとか偉いやつが言ったらすぐ真似をして ○○をしなくなるのが情弱 Matzみたいなのが「これから来る言語」 Haskellとか言ったら すぐ真似して Haskellしだすやつが情弱 >>286 =こいつ最高に図星
296 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 23:44:42.21 ] Haskellの話しようぜ
297 名前:289 mailto:sage [2012/11/05(月) 23:45:16.42 ] >>293 ありがと とりあえず勉強だけなら処理速度は要らないから、 vm player に linux 入れて、そっちでやってみるよ
298 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 00:53:45.21 ] 実用度外視なんだから、偉いやつが言ったことをすぐ真似してHaskellやるのが正解 どうせネットで偉い人のマネする以上の教育課程が揃ってないんだから
299 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 07:18:02.31 ] 教育してもらわなきゃプログラミングすら出来ないアホは まったく向いてないからリアル土方に転向したほうが良いよ?
300 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 07:31:54.96 ] 侮辱がただの賛意表明になっているような 元からそのつもりだったのか? いや、そういう文体には見えないなあ 要するに>>299 はアホなんだろう
301 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 07:33:11.89 ] え?まじで教育が必要なの? 大学でも別にプログラミングなんて独学だっただろ? え?大学行ってないの?
302 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 07:34:45.38 ] 俺が言いたいのは>>298 と>>299 って同じ主張じゃね? ってこと ほんとに大学行ってるの?
303 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 07:36:37.37 ] >>298 は「教育環境揃ってない = 実用度外視」 と書いてるようにしか読めんのだが 教育されなきゃ実用的なプログラミングも出来ないアホは向いてないよ
304 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 07:41:52.94 ] 話通じてないなあ・・・ 自分の発言にあとから留保つけちゃってるし まあ俺は>>298 じゃないからいいんだけどさ
305 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 07:44:55.65 ] アホが偉い人のマネすべきってのはその通りだな 自分で考える脳みそ無いし
306 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 07:48:21.06 ] GHCはRuby以下の安定性
307 名前:デフォルトの名無しさん [2012/11/06(火) 09:29:03.76 ] ∧_∧ ( ´Д`) <みなさーん、お茶が入りましたよ〜 / \ | l l | ..,. ., ., | | | _|。.:_::゜。-.;.:゜。:.:;。 ヽ \_ .。'゚/ `。:、`;゜:;.::.。:.:。 /\_ン∩ソ\ ::..゜:: ゚。:.:.::.。.。:. . / /`ー'ー'\ \ ゜: ::..゜:: ゚。:.:.:,。:.:. 〈 く / / ::..゜:: ゚。:.:.:,.:.:.:。:.:, . \ L ./ / _::..゜:: ゚。:.:.:,.:.:,.:.:.:, 〉 ) ( .::旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦. (_,ノ .`ー'旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦.
308 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 10:19:19.89 ] 298 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/06(火) 00:53:45.21 実用度外視なんだから、偉いやつが言ったことをすぐ真似してHaskellやるのが正解 どうせネットで偉い人のマネする以上の教育課程が揃ってないんだから 305 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/06(火) 07:44:55.65 アホが偉い人のマネすべきってのはその通りだな 自分で考える脳みそ無いし
309 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 10:58:32.92 ] Matzってそれほど「偉いやつ」だっけ
310 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 14:23:00.82 ] Perl忍者最近見ないな
311 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 17:31:28.63 ] >>261 じゃあfmap的なことはどう実現したらいいんですか!?
312 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 18:24:59.42 ] >>311 Data.Vector.Unboxed.map
313 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 19:07:44.24 ] >>312 (////)
314 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 19:14:05.47 ] (////) ::
315 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 23:10:36.99 ] (////) :: Answer -> Shame
316 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 19:52:02.96 ] 質問です。Writerモナドというものを知ったので、前から知りたかった 遅延評価される場合のたらいまわし関数の呼び出され回数というものが知りたくて以下のように書きました。 import Control.Monad.Writer tak :: Int -> Int -> Int -> Writer (Sum Int) Int tak x y z | x <= y = do tell(Sum 1) return z | otherwise = do tell(Sum 1) tak (fst(runWriter(tak (x - 1) y z))) (fst(runWriter(tak (y - 1) z x))) (fst(runWriter(tak (z - 1) x y))) これで動くは動くんですが、引数を色々変えてもカウントが高々3でした。 少し考えてみて、再帰で呼んだ結果のカウントを捨ててるせいだろうというのは分かったのですが 改善策が思いつきません。上手い書き方があったら教えてもらえないでしょうか。 また、もしWriterでカウントするのが無理だとしたらどうするのが定石でしょうか?
317 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 20:03:07.81 ] 入門書のリスト内包表記にガードが使えるという下りを読んで、凄い衝撃を受けた。 もしかしてHaskellって、Prologよりも抽象度が高いのかも。 実際にプログラムを作るまでになれば、泥臭いこともいろいろあるんだろうけど。
318 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 21:19:45.25 ] >>316 関数の評価回数を知りたいだけでしたら、プロファイリングすれば簡単にわかりますよ。 コンパイル時に3つのオプション "-rtsopts -prof -auto-all" を付けて、 実行ファイルの起動時にRTSオプション "+RTS -p" を付ければ、 *.prof ファイルができるんで、それを読めばいいです。 prof ファイルの一番下の表を見てください。 1列目に関数名(変数も関数)、2列目にモジュール名とあって、 4列目の "entries" の項目が評価回数です。 例えば z を返すバージョンの tak 関数を使って、 main :: IO main = do let z = tak 3 2 1 print z を上記のようにコンパイルして実行してできた prof ファイルを見ると、 tak の評価回数は 5 と表記されています。 (実際に手計算で let z = tak 3 2 1 を簡約すると、 確かに5回 tak 関数が評価されていることが確認できます) プロファイリングの詳細は「本物のプログラマはHaskellを使う」 の第45回の記事を参考にしてください。 こういうことではなく、プログラムの中でカウントする仕組みを作るには、 という趣旨の質問でしょうか?
319 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 21:33:42.67 ] >>316 こうすればok tak x y z | x <= y = do tell(Sum 1) return z | otherwise = do tell(Sum 1) x' <- tak (x - 1) y z ;変えた y' <- tak (y - 1) z x ;変えた z' <- tak (z - 1) x y ;変えた tak x' y' z' ;変えた
320 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 21:46:20.04 ] >>316 がやりたいのは"遅延評価された場合"だからWriterだとマズイかも
321 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 21:46:32.28 ] >>318 すみません、書き忘れました。 仰る通りプログラムの中でカウントする仕組みを作るには、という趣旨です。 >>319 それをやると遅延評価の場合と結果変わっちゃいませんかね?
322 名前:319 mailto:sage [2012/11/08(木) 21:57:07.69 ] すいませんでした。orz snd(runWriter(tak 100 50 0))とかやると糞時間かかりますね。 あとここちょっと違ってます。 | x <= y = do tell(Sum 1) return y; 変えた
323 名前:319 mailto:sage [2012/11/08(木) 21:59:19.20 ] ああごめん。>>322 の最後は無視して。orz
324 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 22:33:46.28 ] >>316 Haskellは純粋だから、評価順序によって違う値を返す関数は書けない。遅延評価を前提とした呼び出し回数を数えるには、明示的に遅延評価をエミュレートする必要がある import Control.Applicative import Control.Monad.ST import Data.STRef thunk :: ST s a -> ST s (ST s a) thunk action = do ref <- newSTRef Nothing return $ do cache <- readSTRef ref case cache of Just val -> return val Nothing -> do val <- action; writeSTRef ref (Just val); return val tak :: STRef s Int -> ST s Int -> ST s Int -> ST s Int -> ST s Int tak counter ex ey ez = do modifySTRef counter (+1) x <- ex; y <- ey if x <= y then ey else do a <- thunk $ tak counter (pred <$> ex) ey ez b <- thunk $ tak counter (pred <$> ey) ez ex c <- thunk $ tak counter (pred <$> ez) ex ey tak counter a b c takCount :: Int -> Int -> Int -> Int takCount x y z = runST (do counter <- newSTRef 0 _ <- tak counter (return x) (return y) (return z) readSTRef counter)
325 名前:324 mailto:sage [2012/11/08(木) 22:35:38.37 ] あれ2chの仕様変わったの… 実体参照は適当に戻してね!
326 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 22:36:17.95 ] >< (//)
327 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 22:53:32.55 ] >>324 ありがとうございます、言い切ってもらえると参考になります。 今すごいH本をやっと読み終わろうかという段階なので正直難しいですが、 そのうち理解できるように精進します。
328 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 23:43:06.04 ] >>325 インデントは全角空白派が大勝利で悔しい 仕様変更の経緯のわかるスレとかあればどなたかプリーズ
329 名前:デフォルトの名無しさん mailto:sage [2012/11/09(金) 13:58:18.49 ] ランタイムのGCっていつ行われるの? アイドル時にやってくれる?
330 名前:デフォルトの名無しさん mailto:sage [2012/11/09(金) 18:56:23.67 ] >>329 メモリが足りなくなったら
331 名前:デフォルトの名無しさん mailto:sage [2012/11/09(金) 19:22:04.75 ] -threaded付けてるならアイドル時にもやる
332 名前:デフォルトの名無しさん mailto:sage [2012/11/09(金) 19:22:21.31 ] >>330 今入力待ちで暇だなー…… あ、もう要らない領域あんじゃん スカベンジスカベンジ…… こうはならないの?
333 名前:デフォルトの名無しさん mailto:sage [2012/11/09(金) 19:23:42.68 ] >>331 あり^^
334 名前:デフォルトの名無しさん mailto:sage [2012/11/09(金) 21:15:13.21 ] 今日 -XTransformListComp なるものの存在を知ったんだけど これって需要あるの? {-# LANGUAGE TransformListComp #-} import GHC.Exts (groupWith) xs = [1,3,4,5,7,9,10,11,13] ys = [x | (x,y) <- zip xs [1..], then group by x-y using groupWith]
335 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 15:48:20.65 ] conduit-0.5.2.7 を使っています。 ライブラリドキュメントの Data.Conduit にチュートリアルがありますが、 sourceList [1..10] $$ fold (+) 0 これの結果がどうなるか調べる方法を探しています。 チュートリアルでは、恐らく ghci 上で上記の式を評価して、 55 という数字が標準出力に出力されている様子が描かれていると思いますが、 私は Windows で GHC 7.6.1 を使っているため、ghci で conduit が使えません。 試しに次のようにしてみても、コンパイルエラーが出ます。 a :: GSink Int IO Int a = sourceList [1..10] $$ fold (+) 0 main :: IO () main = print a -------------------------------- No instance for (Show (Pipe l0 Int o0 u0 IO Int)) arising from a use of `print' -------------------------------- どうすればチュートリアルのように sourceList [1..10] $$ fold (+) 0 の評価結果を数値または数字で得る、 あるいは標準出力へ出力することができるでしょうか。
336 名前:355 mailto:sage [2012/11/11(日) 16:02:03.19 ] >>355 これでできました。 a :: GSink () IO Int a = sourceList [1..10] $$ fold (+) 0 main :: IO () main = do a <- runPipe a print a なんか不親切なチュートリアルですね。 最初の sourceFile の例ではちゃんと runResourceT があるのに。
337 名前:335 mailto:sage [2012/11/11(日) 16:02:48.97 ] すいません、レス番間違っていました。 >>335 です。
338 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 18:20:04.17 ] 皆さんの思うハスケルの他の言語に対する優位性はなんですか?
339 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 18:25:43.15 ] conduit-0.5.4ならsourceList [1..10] $$ fold (+) 0で大丈夫だった それよりWindowsのghc7.6.1ではghci上でconduitが使えないというのが気になる
340 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 18:53:17.01 ] >>339 >>289 >>290 >>293 辺り
341 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 19:02:24.58 ] >>339 7日に 0.5.4 が公開されていたんですね(その前日にDLしてました) 今 0.5.4.1 にアップデートして、 sourceList [1..10] $$ fold (+) 0 の値を print してみましたが、 コンパイルエラーでした。 大丈夫だったというのは、どのようにやったのでしょうか。
342 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 19:07:49.53 ] >>338 普段感じる利点はこのあたり 大域的な型推論 直和型が簡単に表現できる(CのunionやOOPLのsubtypeと比べて) パターンマッチ(網羅性チェック、分岐と値の取り出しを同時に行える、など) 副作用のある箇所が型により分離される (LLとかよりは)実行速度が速い
343 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 19:10:49.18 ] ほむほむ。
344 名前:341 mailto:sage [2012/11/11(日) 19:11:52.88 ] >>339 あぁ、分かりました。 (sourceList [1..10] $$ fold (+) 0) >> print こういう事ですね。 これならできました。 もしかして、これならアップデートしなくてもできていたかも知れません。 ところで、conduit を 0.5.2.7 から 0.5.4.1 へ "cabal install conduit" でアップデートしたのですが、 ライブラリドキュメントの方はこれでは更新されないのでしょうか。 (デフォルトなら ・・・/AppData/Roaming/cabal/doc/index.html にインストールされるものです) ドキュメントの表記の方は 0.5.2.7 のままなんです。
345 名前:341 mailto:sage [2012/11/11(日) 19:18:31.91 ] >>344 誤 (sourceList [1..10] $$ fold (+) 0) >> print 正 (sourceList [1..10] $$ fold (+) 0) >>= print ライブラリドキュメントの方はトップの目次のところだけでなく、 内容も、例えば Data.Conduit のページの上部にも "conduit-0.5.2.7: Streaming data processing library." と書かれていて、更新されていません。 こういうものなのでしょうか。 Cabal のパッケージのバージョンは、 (規則に従うなら)4つ目の番号の変更は、 互換性は保っているがAPIが変更されている事になるので、 ドキュメントも変更しないとまずいような気がするのですが・・・
346 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 20:02:42.53 ] ghciで λ> sourceList [1..10] $$ fold (+) 0 って入力しただけだけど 省略 >>= printと同じ事か ドキュメンテーションが更新されないのは多分haddockのバージョンとghcのバージョンが違うから生成に失敗してるとかが考えられる
347 名前:341 mailto:sage [2012/11/11(日) 20:46:24.73 ] >>346 > 省略 >>= printと同じ事か なるほど、たしかに。 > 多分haddockのバージョンとghcのバージョンが違うから haddock.exe は ghc 7.6.1 に元々入っているのですが、 これが違うという事でしょうか。 ちなみに、ghc の bin ディレクトリには haddock.exe とは別に、 haddock-7.6.1 という名前の謎のファイルもあります。 (バイナリエディタで見てみると、形は実行ファイルの様ですが) どうも、ghc 7.6.1 は謎の挙動かちらほらとありますね・・・
348 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 22:43:59.93 ] インストールした直後にcabalでconduit入れた時になんかhaddockのバージョンがおかしいって警告出たから cabal install haddockで入れなおしたらconduitのドキュメント作ってくれるようになった これはcabal/binにhaddockがあるからそっちが優先されるのが原因だけど
349 名前:デフォルトの名無しさん mailto:sage [2012/11/12(月) 02:11:31.23 ] >>342 Javaのような言語で書かれた業務アプリ、ドカタの世界にもこれから進出してきたりしますかね
350 名前:デフォルトの名無しさん mailto:sage [2012/11/12(月) 06:17:52.78 ] >>349 早くて20年後ぐらいじゃね?
351 名前:デフォルトの名無しさん mailto:sage [2012/11/12(月) 20:15:17.94 ] Javaで書かれた商用ソフト見たことがない ハードについてるドライバは何度かある
352 名前:デフォルトの名無しさん mailto:sage [2012/11/12(月) 20:22:24.00 ] >>351 俺はひとつだけ知ってる astah* Haskell で書かれた商用ソフトってあるんかな うちは社内ツールではあるけど
353 名前:デフォルトの名無しさん mailto:sage [2012/11/12(月) 20:29:59.56 ] そういえばperlやjavascriptで書かれた商用ソフトも見たこと無いな。
354 名前:デフォルトの名無しさん mailto:sage [2012/11/12(月) 20:33:15.19 ] コンパイルできない言語ってソースをそのまま売ることになると思うけど、それって商売になるのだろうか
355 名前:デフォルトの名無しさん mailto:sage [2012/11/12(月) 20:37:06.13 ] ソースを売れっていうのは普通にあるでしょ
356 名前:デフォルトの名無しさん mailto:sage [2012/11/12(月) 20:43:17.14 ] Android 用有料アプリは Java で書かれた商用ソフトである という認識でいいのか?
357 名前:341 mailto:sage [2012/11/12(月) 22:44:21.87 ] >>348 Haddock を cabal install で入れてから、 cabal install --reinstall Conduit してもダメでした。 (ghc\bin ディレクトリより cabal\bin ディレクトリの方が 優先的に検索されるように設定しましたが・・・) cabal\bin の Haddock.exe を ghc\bin へコピーしてみましたがダメでした。 よく見たら、cabal\doc 内には conduit-0.5.2.7 と conduit-0.5.4.1 があったので、 conduit-0.5.2.7 の方を適当にリネームして、index.html もリネームし、 この状態で cabal install --reinstall Conduit してみたら、 ドキュメントの目次やコンテンツの Conduit のバージョンが ちゃんと 0.5.2.7 に更新されました。 Haddock の更新は必要条件だったのかよく分かりませんが、 とりかくドキュメントが正しく更新できて良かったです。 お騒がせしました。
358 名前:デフォルトの名無しさん mailto:sage [2012/11/13(火) 20:32:21.56 ] >>351 Minecraft
359 名前:デフォルトの名無しさん mailto:sage [2012/11/14(水) 13:53:30.81 ] 何だよ type family Mutable v :: * -> * -> * Mutable v s a is the mutable version of the pure vector type v a with the state token s って リワハじゃ習わなかったぞ
360 名前:デフォルトの名無しさん mailto:sage [2012/11/14(水) 15:21:27.75 ] トップレベルの関数の型宣言で Unbox a => ……としたとして letやwhereと続けた内部関数にも型宣言をつけるとします このとき、その宣言でもトップレベルの a と同じ型を指定する為にはどうしますか?
361 名前:デフォルトの名無しさん mailto:sage [2012/11/14(水) 18:30:25.04 ] 関数を生成する関数 :: Unbox a => 内部関数の型 -> トップレベル関数の型 トップレベル関数 = 関数を生成する関数 内部関数 where 内部関数 = …
362 名前:デフォルトの名無しさん mailto:sage [2012/11/14(水) 19:30:01.00 ] >>360 Lexically scoped type variables の事かな
363 名前:デフォルトの名無しさん mailto:sage [2012/11/19(月) 07:06:57.78 ] 関数内使わないほうが読みやすく感じる whereって必要ですか?
364 名前:デフォルトの名無しさん mailto:sage [2012/11/19(月) 07:07:41.13 ] s/関数内/関数内の関数定義/
365 名前:デフォルトの名無しさん mailto:sage [2012/11/19(月) 07:37:36.32 ] さすがに一時束縛なしはハードモードでないの? letのほうが読みやすいということもあまりないでしょう
366 名前:デフォルトの名無しさん mailto:sage [2012/11/19(月) 08:06:27.68 ] 関数内関数は自由変数が多くて理解するのが難しいです トップレベルの関数に持ち上げてしまって、モジュールの機能で外部からは隠して、 自由変数になっていたところは明示的に引数として渡すほうが良いのではないかと
367 名前:デフォルトの名無しさん mailto:sage [2012/11/19(月) 08:09:12.81 ] ケースバイケースなんで whereが要る要らないの話にはならないと思う
368 名前:デフォルトの名無しさん mailto:sage [2012/11/19(月) 08:13:31.56 ] それはね、長い関数が読み難いだけなんだよ
369 名前:デフォルトの名無しさん mailto:sage [2012/11/19(月) 18:06:19.91 ] 自由変数の追いにくさと引数渡しの煩雑さを天秤に掛けた結果、 多くの人はwhereを大量に使うことを選択している 何を読み難いと感じるかは個人差が大きいから、 多数派と違う感性を持ってると生きづらいね という結論が嫌なら、「読みやすく感じる」よりも客観的な論拠を挙げてください
370 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 00:03:10.08 ] プログラムは書くことより読むことのほうが難しいし読むことの方が多い whereはプログラムを書きやすくできるが読みにくくする whereを使うのは甘え
371 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 06:58:26.14 ] >>366 関数内のスコープに限定するより モジュール内スコープに広げた方が読みやすい? 頭大丈夫?
372 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 07:07:32.45 ] >>370 頭の中で、読みにくいコードを読みやすいコードに書きかえればいいだろ それができる人は読むことより書くことが多い
373 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 07:38:40.46 ] >>363 末尾再帰覚えてない人かな? where使わず書いたら、引数の数が違うだけで同じ機能の関数が沢山出来上がってしまう sum ns = sum' ns 0 where sum' [] v = v sum' (n:ns) v = sum' ns (n + v) whereが無ければsum関数とsum'関数の両方が関数を使う側に公開されるか、末尾再帰関数作る度にモジュール書き換えが必要になる
374 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 08:10:24.50 ] sum ns = let sum' [] v = v sum' (n:ns) v = sum' ns (n + v) in sum' ns 0
375 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 09:16:11.00 ] >>372 君、仕事でプログラム書いたことないでしょ?
376 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 09:29:43.91 ] どっちも同じだと思えば両方読めるようになるのに、ノイズが気になって読めない ノイズが少ない方が優れているといってノイズばかり見ている 雑音を無視したら優劣の概念がなくなってしまう 優劣を気にするとデジタルが読めなくなる
377 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 09:57:34.35 ] 仕事でHaskell使った事ないわーw
378 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 14:25:22.30 ] そもそも、お前がいう「仕事」って、受注開発(の賃金労働)のことだろ? 自分で作ったサービスで始める仕事(ビジネス)だったら、言語はなんだっていいんだよ。 ドヤ顔で「仕事でhaskell使ったことないわ」とか恥ずかしすぎるわw
379 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 14:26:08.12 ] 会社に小遣いもらってる分際が偉そうに、と思うね。
380 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 14:45:50.00 ] 仕事で戦車使ったことないわ
381 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 15:35:16.08 ] ああ、Haskellerってこういうのばっかなのね
382 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 16:26:57.23 ] まだ平和な方のスレですよ
383 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 18:16:34.72 ] >>366 トップレベルにリフトすれば自由変数が減るかのような錯覚はどこからきた?
384 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 18:21:28.91 ] さすがに>>378-379 は引くわ
385 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 18:30:03.16 ] 関西型プログラミング言語
386 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 18:49:25.20 ] なんでやねん
387 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 22:50:08.77 ] Haskell使う案件ってどこに行けばあるんだろうな。
388 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 23:02:02.53 ] Haskell を使う事案が発生しました
389 名前:デフォルトの名無しさん mailto:sage [2012/11/21(水) 01:14:53.06 ] >>387 大学
390 名前:デフォルトの名無しさん mailto:sage [2012/11/21(水) 07:23:50.52 ] >>387 実際にどのような仕事があるか知らんが、 君には "haskell commercial OR industry" でググる知恵はないのか
391 名前:デフォルトの名無しさん mailto:sage [2012/11/21(水) 09:17:06.66 ] ちえをくれ
392 名前:デフォルトの名無しさん mailto:sage [2012/11/22(木) 02:43:01.30 ] おいおい、haskell使った仕事が貰えないなら、 自分で始めればいいだけだろ。 仕事を作るのも仕事のうち。
393 名前:デフォルトの名無しさん mailto:sage [2012/11/22(木) 06:04:12.01 ] ま、自分が知らないからって無いで押し切るのは 一つの生き方ではあるわな
394 名前:デフォルトの名無しさん mailto:sage [2012/11/22(木) 07:38:46.45 ] >>392 いや、維持保守を引き継ぐ人たちがHaskell使えないのに Haskellのソースを残すわけには行かないだろ。
395 名前:デフォルトの名無しさん mailto:sage [2012/11/22(木) 09:54:55.62 ] Cに変換して納品