[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 11/22 12:05 / Filesize : 103 KB / Number-of Response : 396
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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/

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に変換して納品






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<103KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef