12/11/05 19:21:08.08
最近流行ってる関手って、そもそも何?
263:デフォルトの名無しさん
12/11/05 19:24:41.98
URLリンク(www.haskell.org)
Haskellでいう関手はこれ
圏論の関手は他を当たってね!
264:デフォルトの名無しさん
12/11/05 19:29:59.09
>>261
マジすか
複雑な事情っすね
実践よりもHaskell型システムの理解に的を絞ったサイトないっすか?
265:デフォルトの名無しさん
12/11/05 19:30:38.26
>>262
map を関手の一つと考えると、関手から自然変換まで簡単に理解できる
簡単に理解できる = 毎日30分定義とにらめっこして1週間ぐらい悩むと分かる
266:デフォルトの名無しさん
12/11/05 19:41:26.25
>>263
Functor クラスが関手のことなら、なにも漢字で書かなくてもよくない?
unboxed vector は Functor クラスのインスタンスじゃないから、
と言う方がはるかに分かりやすいというか、ストレートだと思うんだが
と感じるのは私だけ?
267:デフォルトの名無しさん
12/11/05 19:44:20.77
知らんがな
268:デフォルトの名無しさん
12/11/05 19:52:07.99
>>266
定着してる訳語があるのに横文字や片仮名を使うのは宗教上の理由でできんのです、ごめんなさい
269:デフォルトの名無しさん
12/11/05 19:55:12.71
>>268
ギャグとしてはあまり面白くない
270:デフォルトの名無しさん
12/11/05 20:02:00.78
女だ! このスレに女が紛れ込んでるぞぉーっ!
魔女を焼き払えーっ!
271:デフォルトの名無しさん
12/11/05 20:04:44.17
一人称を私にすると賢そうに見えるの法則
272:デフォルトの名無しさん
12/11/05 20:14:25.77
ん?
Functor クラスそのものは関手なの?
Functor クラスがたまたま持つ性質(種数やfmap関数など)を持つものが関手なの?
たとえば Applicative なども関手?
Functor クラス自身とそのインスタンスのみが関手?
Functor クラスそのもののみが関手で、そのインスタンスは集合の要素みたいなもの?
わけが分からなくなった・・・
>>271
一人称「私」なんて誰でも使うから、賢そうに見える要素にならないでしょ
273:デフォルトの名無しさん
12/11/05 20:20:11.08
>>272
二番目が一番近いと思う
274:デフォルトの名無しさん
12/11/05 20:24:02.72
>>273
そうだとすると、>>268 の言う「定着してる訳語」っておかしくないか?
>>268 の言い方だと Functor の日本語訳が関手である、
と言っているように聞こえる
275:デフォルトの名無しさん
12/11/05 20:29:18.54
>>274
圏論でFunctorの訳語が関手だから、それ以外に訳しようがない
276:デフォルトの名無しさん
12/11/05 20:33:04.72
圏論でFunctorと、haskellのFunctorクラスは同じもの?
277:デフォルトの名無しさん
12/11/05 20:38:18.43
わかった
今後Haskellのファンクタの意味で関手といいたい場合
いわゆる関手
と書くことにしよう
278:デフォルトの名無しさん
12/11/05 20:39:30.80
>>276
HaskellのFunctorクラスのインスタンスはある種の(圏論的な意味の)関手(の対象部分)になってる
具体的にはHask圏からHask圏への関手
逆に、ある型構築子が(圏論的な意味の)関手になっていてもFunctorのインスタンスとは限らない
たとえば>>258のunboxed vectorがそう
279:デフォルトの名無しさん
12/11/05 20:48:17.32
>>278
じゃあ、HaskellのFunctorクラスを安易に関手と言うのは、
文脈によっては危険じゃないか?
どの文脈だと危険か正しく理解してる奴しか使えない訳語な感じがするが
280:デフォルトの名無しさん
12/11/05 20:53:08.78
>>279
もちろん混乱の原因になることはあるけど、
*Functorのインスタンスを関手と呼ぶ
のをその論法で禁止したら、
*Monadのインスタンスをモナドと呼ぶ
*Monoidのインスタンスをモノイドと呼ぶ
*Numのインスタンスを数値型と呼ぶ
あたりも言えなくなって不便じゃないか
281:デフォルトの名無しさん
12/11/05 20:53:32.47
単位元と結合律を保存する高階関数は関手
という理解は正しいでしょうか?
282:デフォルトの名無しさん
12/11/05 20:59:21.14
>>281
「恒等関数と関数結合を保存する高階関数」と言った方が良さそう
283:デフォルトの名無しさん
12/11/05 21:09:19.73
関手はFunctorではなくfmapじゃないのん?
284:デフォルトの名無しさん
12/11/05 21:12:51.87
>>280
なるほど、そう言われると、たしかに不便だな。
Haskell の話をしていると判りきっている時には
Monad のインスタンスはモナドと言いたい。
(個人的にはFunctorのインスタンスはファンクタと言いたいが)
でも、Haskell の話をしてるときに、いきなり圏論が姿を現し、
そのまま議論が進んでいくと、ややこしくならない?
そういうシーンをこのスレでよく見かける
285:デフォルトの名無しさん
12/11/05 22:05:15.91
271 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/05(月) 20:04:44.17
一人称を私にすると賢そうに見えるの法則
賢くみられたいからHaskellやるという法則
286:デフォルトの名無しさん
12/11/05 22:11:23.06
賢く見られたいからHaskellって・・・
賢く見られたいんならMITで博士号取るだろ普通
287:デフォルトの名無しさん
12/11/05 22:47:19.80
>>286
ギャグとしてはあまりおもしろくない
288:デフォルトの名無しさん
12/11/05 22:51:06.92
>>287
一度目はいいけど、二度やると冷める
もう止めた方がいいと思うよ
289:デフォルトの名無しさん
12/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: URLリンク(www.haskell.org)
これはバグ?
俺英語書けなくてバグ報告できないんだが、詰んだかな
290:289
12/11/05 23:10:49.65
あ、ちなみに ghc でコンパイルすれば問題なく実行できるから、詰んではないか
でも色々実験して勉強しようと思ってたんだが、ghci 使えないとなると、
かなり面倒になるなぁ・・・
291:デフォルトの名無しさん
12/11/05 23:12:17.93
>>281-283
関手とはある圏の対象と射をもう一つの圏(自己関手の場合は同じ圏)に移すものだから、
Functorのインスタンスとfmapセットで関手と言うのが一番近い
292:デフォルトの名無しさん
12/11/05 23:37:08.23
>>286=こいつ図星
こいつ>>285のレスに図星しすぎれレスしてやがる
だいたいのやつは必死に悔しくても反応したら負けっていう考え持ってるから食いつかない
こいつは食いついた正直者
293:デフォルトの名無しさん
12/11/05 23:41:21.48
>>290
たぶんWindows固有の問題
LinuxかMacを使うとか、Windowsなら仮想マシン上でLinux使えば、問題が出ない可能性が高い
この手の開発はUnix系メインでやっててWindowsはオマケのことが多いから、
細かいとこで目の行き届かない不具合があったりする
294:デフォルトの名無しさん
12/11/05 23:41:35.04
俺、Haskellぐらいしかまともに書ける言語ないんだが、
正直それはそれで非常に恥ずかしい思いをしている
295:デフォルトの名無しさん
12/11/05 23:41:49.81
○○をしたら負けとか偉いやつが言ったらすぐ真似をして
○○をしなくなるのが情弱
Matzみたいなのが「これから来る言語」 Haskellとか言ったら
すぐ真似して
Haskellしだすやつが情弱
>>286=こいつ最高に図星
296:デフォルトの名無しさん
12/11/05 23:44:42.21
Haskellの話しようぜ
297:289
12/11/05 23:45:16.42
>>293
ありがと
とりあえず勉強だけなら処理速度は要らないから、
vm player に linux 入れて、そっちでやってみるよ
298:デフォルトの名無しさん
12/11/06 00:53:45.21
実用度外視なんだから、偉いやつが言ったことをすぐ真似してHaskellやるのが正解
どうせネットで偉い人のマネする以上の教育課程が揃ってないんだから
299:デフォルトの名無しさん
12/11/06 07:18:02.31
教育してもらわなきゃプログラミングすら出来ないアホは
まったく向いてないからリアル土方に転向したほうが良いよ?
300:デフォルトの名無しさん
12/11/06 07:31:54.96
侮辱がただの賛意表明になっているような
元からそのつもりだったのか?
いや、そういう文体には見えないなあ
要するに>>299はアホなんだろう
301:デフォルトの名無しさん
12/11/06 07:33:11.89
え?まじで教育が必要なの?
大学でも別にプログラミングなんて独学だっただろ?
え?大学行ってないの?
302:デフォルトの名無しさん
12/11/06 07:34:45.38
俺が言いたいのは>>298と>>299って同じ主張じゃね?
ってこと
ほんとに大学行ってるの?
303:デフォルトの名無しさん
12/11/06 07:36:37.37
>>298は「教育環境揃ってない = 実用度外視」
と書いてるようにしか読めんのだが
教育されなきゃ実用的なプログラミングも出来ないアホは向いてないよ
304:デフォルトの名無しさん
12/11/06 07:41:52.94
話通じてないなあ・・・
自分の発言にあとから留保つけちゃってるし
まあ俺は>>298じゃないからいいんだけどさ
305:デフォルトの名無しさん
12/11/06 07:44:55.65
アホが偉い人のマネすべきってのはその通りだな
自分で考える脳みそ無いし
306:デフォルトの名無しさん
12/11/06 07:48:21.06
GHCはRuby以下の安定性
307:デフォルトの名無しさん
12/11/06 09:29:03.76
∧_∧
( ´Д`) <みなさーん、お茶が入りましたよ~
/ \
| l l | ..,. ., .,
| | | _|。.:_::゜。-.;.:゜。:.:;。
ヽ \_ .。'゚/ `。:、`;゜:;.::.。:.:。
/\_ン∩ソ\ ::..゜:: ゚。:.:.::.。.。:.
. / /`ー'ー'\ \ ゜: ::..゜:: ゚。:.:.:,。:.:.
〈 く / / ::..゜:: ゚。:.:.:,.:.:.:。:.:,
. \ L ./ / _::..゜:: ゚。:.:.:,.:.:,.:.:.:,
〉 ) ( .::旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦.
(_,ノ .`ー'旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦.
308:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/11/06 10:58:32.92
Matzってそれほど「偉いやつ」だっけ
310:デフォルトの名無しさん
12/11/06 14:23:00.82
Perl忍者最近見ないな
311:デフォルトの名無しさん
12/11/06 17:31:28.63
>>261
じゃあfmap的なことはどう実現したらいいんですか!?
312:デフォルトの名無しさん
12/11/06 18:24:59.42
>>311
Data.Vector.Unboxed.map
313:デフォルトの名無しさん
12/11/06 19:07:44.24
>>312
(////)
314:デフォルトの名無しさん
12/11/06 19:14:05.47
(////) ::
315:デフォルトの名無しさん
12/11/06 23:10:36.99
(////) :: Answer -> Shame
316:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/11/08 20:03:07.81
入門書のリスト内包表記にガードが使えるという下りを読んで、凄い衝撃を受けた。
もしかしてHaskellって、Prologよりも抽象度が高いのかも。
実際にプログラムを作るまでになれば、泥臭いこともいろいろあるんだろうけど。
318:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/11/08 21:46:20.04
>>316がやりたいのは"遅延評価された場合"だからWriterだとマズイかも
321:デフォルトの名無しさん
12/11/08 21:46:32.28
>>318
すみません、書き忘れました。
仰る通りプログラムの中でカウントする仕組みを作るには、という趣旨です。
>>319
それをやると遅延評価の場合と結果変わっちゃいませんかね?
322:319
12/11/08 21:57:07.69
すいませんでした。orz
snd(runWriter(tak 100 50 0))とかやると糞時間かかりますね。
あとここちょっと違ってます。
| x <= y = do
tell(Sum 1)
return y; 変えた
323:319
12/11/08 21:59:19.20
ああごめん。>>322の最後は無視して。orz
324:デフォルトの名無しさん
12/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
12/11/08 22:35:38.37
あれ2chの仕様変わったの…
実体参照は適当に戻してね!
326:デフォルトの名無しさん
12/11/08 22:36:17.95
>< (//)
327:デフォルトの名無しさん
12/11/08 22:53:32.55
>>324
ありがとうございます、言い切ってもらえると参考になります。
今すごいH本をやっと読み終わろうかという段階なので正直難しいですが、
そのうち理解できるように精進します。
328:デフォルトの名無しさん
12/11/08 23:43:06.04
>>325
インデントは全角空白派が大勝利で悔しい
仕様変更の経緯のわかるスレとかあればどなたかプリーズ
329:デフォルトの名無しさん
12/11/09 13:58:18.49
ランタイムのGCっていつ行われるの?
アイドル時にやってくれる?
330:デフォルトの名無しさん
12/11/09 18:56:23.67
>>329
メモリが足りなくなったら
331:デフォルトの名無しさん
12/11/09 19:22:04.75
-threaded付けてるならアイドル時にもやる
332:デフォルトの名無しさん
12/11/09 19:22:21.31
>>330
今入力待ちで暇だなー……
あ、もう要らない領域あんじゃん
スカベンジスカベンジ……
こうはならないの?
333:デフォルトの名無しさん
12/11/09 19:23:42.68
>>331
あり^^
334:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/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
12/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
12/11/11 16:02:48.97
すいません、レス番間違っていました。
>>335 です。
338:デフォルトの名無しさん
12/11/11 18:20:04.17
皆さんの思うハスケルの他の言語に対する優位性はなんですか?
339:デフォルトの名無しさん
12/11/11 18:25:43.15
conduit-0.5.4ならsourceList [1..10] $$ fold (+) 0で大丈夫だった
それよりWindowsのghc7.6.1ではghci上でconduitが使えないというのが気になる
340:デフォルトの名無しさん
12/11/11 18:53:17.01
>>339
>>289 >>290 >>293 辺り
341:デフォルトの名無しさん
12/11/11 19:02:24.58
>>339
7日に 0.5.4 が公開されていたんですね(その前日にDLしてました)
今 0.5.4.1 にアップデートして、
sourceList [1..10] $$ fold (+) 0 の値を print してみましたが、
コンパイルエラーでした。
大丈夫だったというのは、どのようにやったのでしょうか。
342:デフォルトの名無しさん
12/11/11 19:07:49.53
>>338 普段感じる利点はこのあたり
大域的な型推論
直和型が簡単に表現できる(CのunionやOOPLのsubtypeと比べて)
パターンマッチ(網羅性チェック、分岐と値の取り出しを同時に行える、など)
副作用のある箇所が型により分離される
(LLとかよりは)実行速度が速い
343:デフォルトの名無しさん
12/11/11 19:10:49.18
ほむほむ。
344:341
12/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
12/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:デフォルトの名無しさん
12/11/11 20:02:42.53
ghciで
λ> sourceList [1..10] $$ fold (+) 0
って入力しただけだけど 省略 >>= printと同じ事か
ドキュメンテーションが更新されないのは多分haddockのバージョンとghcのバージョンが違うから生成に失敗してるとかが考えられる
347:341
12/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:デフォルトの名無しさん
12/11/11 22:43:59.93
インストールした直後にcabalでconduit入れた時になんかhaddockのバージョンがおかしいって警告出たから
cabal install haddockで入れなおしたらconduitのドキュメント作ってくれるようになった
これはcabal/binにhaddockがあるからそっちが優先されるのが原因だけど
349:デフォルトの名無しさん
12/11/12 02:11:31.23
>>342
Javaのような言語で書かれた業務アプリ、ドカタの世界にもこれから進出してきたりしますかね
350:デフォルトの名無しさん
12/11/12 06:17:52.78
>>349
早くて20年後ぐらいじゃね?
351:デフォルトの名無しさん
12/11/12 20:15:17.94
Javaで書かれた商用ソフト見たことがない
ハードについてるドライバは何度かある
352:デフォルトの名無しさん
12/11/12 20:22:24.00
>>351
俺はひとつだけ知ってる
astah*
Haskell で書かれた商用ソフトってあるんかな
うちは社内ツールではあるけど
353:デフォルトの名無しさん
12/11/12 20:29:59.56
そういえばperlやjavascriptで書かれた商用ソフトも見たこと無いな。
354:デフォルトの名無しさん
12/11/12 20:33:15.19
コンパイルできない言語ってソースをそのまま売ることになると思うけど、それって商売になるのだろうか
355:デフォルトの名無しさん
12/11/12 20:37:06.13
ソースを売れっていうのは普通にあるでしょ
356:デフォルトの名無しさん
12/11/12 20:43:17.14
Android 用有料アプリは Java で書かれた商用ソフトである
という認識でいいのか?
357:341
12/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:デフォルトの名無しさん
12/11/13 20:32:21.56
>>351
Minecraft
359:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/11/14 15:21:27.75
トップレベルの関数の型宣言で
Unbox a => ……としたとして
letやwhereと続けた内部関数にも型宣言をつけるとします
このとき、その宣言でもトップレベルの a と同じ型を指定する為にはどうしますか?
361:デフォルトの名無しさん
12/11/14 18:30:25.04
関数を生成する関数 :: Unbox a => 内部関数の型 -> トップレベル関数の型
トップレベル関数 = 関数を生成する関数 内部関数 where 内部関数 = …
362:デフォルトの名無しさん
12/11/14 19:30:01.00
>>360
Lexically scoped type variables の事かな
363:デフォルトの名無しさん
12/11/19 07:06:57.78
関数内使わないほうが読みやすく感じる
whereって必要ですか?
364:デフォルトの名無しさん
12/11/19 07:07:41.13
s/関数内/関数内の関数定義/
365:デフォルトの名無しさん
12/11/19 07:37:36.32
さすがに一時束縛なしはハードモードでないの? letのほうが読みやすいということもあまりないでしょう
366:デフォルトの名無しさん
12/11/19 08:06:27.68
関数内関数は自由変数が多くて理解するのが難しいです
トップレベルの関数に持ち上げてしまって、モジュールの機能で外部からは隠して、
自由変数になっていたところは明示的に引数として渡すほうが良いのではないかと
367:デフォルトの名無しさん
12/11/19 08:09:12.81
ケースバイケースなんで
whereが要る要らないの話にはならないと思う
368:デフォルトの名無しさん
12/11/19 08:13:31.56
それはね、長い関数が読み難いだけなんだよ
369:デフォルトの名無しさん
12/11/19 18:06:19.91
自由変数の追いにくさと引数渡しの煩雑さを天秤に掛けた結果、
多くの人はwhereを大量に使うことを選択している
何を読み難いと感じるかは個人差が大きいから、
多数派と違う感性を持ってると生きづらいね
という結論が嫌なら、「読みやすく感じる」よりも客観的な論拠を挙げてください
370:デフォルトの名無しさん
12/11/20 00:03:10.08
プログラムは書くことより読むことのほうが難しいし読むことの方が多い
whereはプログラムを書きやすくできるが読みにくくする
whereを使うのは甘え
371:デフォルトの名無しさん
12/11/20 06:58:26.14
>>366
関数内のスコープに限定するより
モジュール内スコープに広げた方が読みやすい?
頭大丈夫?
372:デフォルトの名無しさん
12/11/20 07:07:32.45
>>370
頭の中で、読みにくいコードを読みやすいコードに書きかえればいいだろ
それができる人は読むことより書くことが多い
373:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/11/20 09:16:11.00
>>372
君、仕事でプログラム書いたことないでしょ?
376:デフォルトの名無しさん
12/11/20 09:29:43.91
どっちも同じだと思えば両方読めるようになるのに、ノイズが気になって読めない
ノイズが少ない方が優れているといってノイズばかり見ている
雑音を無視したら優劣の概念がなくなってしまう
優劣を気にするとデジタルが読めなくなる
377:デフォルトの名無しさん
12/11/20 09:57:34.35
仕事でHaskell使った事ないわーw
378:デフォルトの名無しさん
12/11/20 14:25:22.30
そもそも、お前がいう「仕事」って、受注開発(の賃金労働)のことだろ?
自分で作ったサービスで始める仕事(ビジネス)だったら、言語はなんだっていいんだよ。
ドヤ顔で「仕事でhaskell使ったことないわ」とか恥ずかしすぎるわw
379:デフォルトの名無しさん
12/11/20 14:26:08.12
会社に小遣いもらってる分際が偉そうに、と思うね。
380:デフォルトの名無しさん
12/11/20 14:45:50.00
仕事で戦車使ったことないわ
381:デフォルトの名無しさん
12/11/20 15:35:16.08
ああ、Haskellerってこういうのばっかなのね
382:デフォルトの名無しさん
12/11/20 16:26:57.23
まだ平和な方のスレですよ
383:デフォルトの名無しさん
12/11/20 18:16:34.72
>>366
トップレベルにリフトすれば自由変数が減るかのような錯覚はどこからきた?
384:デフォルトの名無しさん
12/11/20 18:21:28.91
さすがに>>378-379は引くわ
385:デフォルトの名無しさん
12/11/20 18:30:03.16
関西型プログラミング言語
386:デフォルトの名無しさん
12/11/20 18:49:25.20
なんでやねん
387:デフォルトの名無しさん
12/11/20 22:50:08.77
Haskell使う案件ってどこに行けばあるんだろうな。
388:デフォルトの名無しさん
12/11/20 23:02:02.53
Haskell を使う事案が発生しました
389:デフォルトの名無しさん
12/11/21 01:14:53.06
>>387
大学
390:デフォルトの名無しさん
12/11/21 07:23:50.52
>>387
実際にどのような仕事があるか知らんが、
君には "haskell commercial OR industry" でググる知恵はないのか
391:デフォルトの名無しさん
12/11/21 09:17:06.66
ちえをくれ
392:デフォルトの名無しさん
12/11/22 02:43:01.30
おいおい、haskell使った仕事が貰えないなら、
自分で始めればいいだけだろ。
仕事を作るのも仕事のうち。
393:デフォルトの名無しさん
12/11/22 06:04:12.01
ま、自分が知らないからって無いで押し切るのは
一つの生き方ではあるわな
394:デフォルトの名無しさん
12/11/22 07:38:46.45
>>392
いや、維持保守を引き継ぐ人たちがHaskell使えないのに
Haskellのソースを残すわけには行かないだろ。
395:デフォルトの名無しさん
12/11/22 09:54:55.62
Cに変換して納品