◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

関数型プログラミング言語Haskell Part31©2ch.net ->画像>6枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1506447188/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん 転載ダメ©2ch.net
2017/09/27(水) 02:33:08.70ID:2XAqPuH2
関数型プログラミング言語 Haskell について語るスレです。

haskell.org (公式サイト)
https://www.haskell.org/

前スレ
関数型プログラミング言語Haskell Part30
http://mevius.2ch.net/test/read.cgi/tech/1484491434/
2デフォルトの名無しさん 転載ダメ©2ch.net
2017/09/27(水) 02:33:55.41ID:2XAqPuH2
過去スレ一覧
29) http://peace.2ch.net/test/read.cgi/tech/1436869629/
28) http://peace.2ch.net/test/read.cgi/tech/1428535861/
27) http://peace.2ch.net/test/read.cgi/tech/1420718555/
26) http://peace.2ch.net/test/read.cgi/tech/1406436392/
25) http://peace.2ch.net/test/read.cgi/tech/1393313450/
24) http://toro.2ch.net/test/read.cgi/tech/1382705669/
23) http://toro.2ch.net/test/read.cgi/tech/1376111807/
22) http://toro.2ch.net/test/read.cgi/tech/1364009659/
21) http://toro.2ch.net/test/read.cgi/tech/1358702176/
20) http://toro.2ch.net/test/read.cgi/tech/1350428908/
19) http://toro.2ch.net/test/read.cgi/tech/1340760070/
18) http://toro.2ch.net/test/read.cgi/tech/1331902463/
17) http://toro.2ch.net/test/read.cgi/tech/1325510368/
16) http://toro.2ch.net/test/read.cgi/tech/1317958045/
15) http://hibari.2ch.net/test/read.cgi/tech/1310199414/
14) http://hibari.2ch.net/test/read.cgi/tech/1299385928/
13) http://hibari.2ch.net/test/read.cgi/tech/1286706874/
12) http://hibari.2ch.net/test/read.cgi/tech/1272536128/
11) http://pc12.2ch.net/test/read.cgi/tech/1252382593/
10) http://pc12.2ch.net/test/read.cgi/tech/1231861873/
09) http://pc11.2ch.net/test/read.cgi/tech/1211010089/
08) http://pc11.2ch.net/test/read.cgi/tech/1193743693/
07) http://pc11.2ch.net/test/read.cgi/tech/1174211797/
06) http://pc11.2ch.net/test/read.cgi/tech/1162902266/
05) http://pc8.2ch.net/test/read.cgi/tech/1149263630/
04) http://pc8.2ch.net/test/read.cgi/tech/1140717775/
03) http://pc8.2ch.net/test/read.cgi/tech/1076418993/
02) http://pc2.2ch.net/test/read.cgi/tech/1013846140/
01) http://pc.2ch.net/tech/kako/996/996131288.html
3関連サイト 転載ダメ©2ch.net
2017/09/27(水) 02:35:40.58ID:2XAqPuH2
(英語)
Haskell - Wikibooks, open books for an open world (ページ内に内容をまとめたPDFあり)
https://en.wikibooks.org/wiki/Haskell

Learn You a Haskell for Great Good! (『すごいHaskellたのしく学ぼう!』の無料オンライン版)
http://learnyouahaskell.com/chapters

Real World Haskell (同名書籍の無料オンライン版)
http://book.realworldhaskell.org/read/

(以下、日本語)
Haskell入門 5ステップ - HaskellWiki (公式サイト内、日本語入門セクション)
https://wiki.haskell.org/Haskell%E5%85%A5%E9%96%80_5%E3%82%B9%E3%83%86%E3%83%83%E3%83%97

Haskell - Wikibooks (上記Wikibooksの同タイトル日本語版。多くの項目が未編集)
https://ja.wikibooks.org/wiki/Haskell

Programming in Haskell
http://www.sampou.org/cgi-bin/haskell.cgi

Haskell のお勉強
http://www.shido.info/hs/

Haskell Programming
http://www.geocities.jp/m_hiroi/func/haskell.html

本物のプログラマはHaskellを使う:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/

[入門]関数プログラミング―質の高いコードをすばやく直感的に書ける!
http://gihyo.jp/dev/feature/01/functional-prog
4デフォルトの名無しさん
2017/09/27(水) 06:37:41.63ID:G9HkNsFz
いちおつ
5デフォルトの名無しさん
2017/09/27(水) 08:45:48.68ID:l2Dkh0U/
質問させてください
Stringの配列xsを1つの要素につき1行ずつ画面に出力する場合、
mapM_ putStrLn xs

putStr.unlines $ xs
ならどちらの方がいいのでしょうか?
6デフォルトの名無しさん
2017/09/27(水) 11:20:36.98ID:3YTsdy+/
https://ideone.com/hreKZz
前スレの分割集合のアルゴリズムをdp風にしてみたけど
結局リストを作るコストは同じだからむしろ遅くなったわ
7デフォルトの名無しさん
2017/09/27(水) 12:38:35.89ID:e62g5PUw
Haskell 入門書の新刊が、今日付で発売。

『Haskell入門 関数型プログラミング言語の基礎と実践』技術評論社、¥3,280(税別)
http://gihyo.jp/book/2017/978-4-7741-9237-6 (一部ページのサンプルpdfあり)
https://www.amazon.co.jp/dp/4774192376
8デフォルトの名無しさん
2017/09/27(水) 13:09:22.03ID:Ig4f10A7
日本人の書くHaskell本は入門書ばっか。
ダメとは言わんが、バラエティーがないね。
9デフォルトの名無しさん
2017/09/27(水) 18:15:22.14ID:fINvBrSj
だって関数プログラミングについて深い内容を書けるだけの知識と見識のある人間なんて日本にはいない
実務家も大学の先生もね
10デフォルトの名無しさん
2017/09/27(水) 19:01:25.65ID:duTWzj9f
誰か、競プロを生き抜くためのHaskell TipsをKindle出版してくれ
できればUnlimited 対応で
11デフォルトの名無しさん
2017/09/27(水) 21:13:41.99ID:A4sTCCrj
英語で構わないので中級者向けの書籍教えて
12デフォルトの名無しさん
2017/09/27(水) 21:45:25.22ID:Ys6dXTpa
>>10
haskell-masterことtanakh大先生に頼むしかないな
13デフォルトの名無しさん
2017/09/27(水) 22:52:12.73ID:vJ1/ghVi
Glorious haskell-master tanakh is crazy about Rust these days.
14デフォルトの名無しさん
2017/09/27(水) 23:06:21.04ID:GBvrW/PZ
>>11
何を以て中級と言えるか分からんが、
実用的なアプリを作るのに欠かせない技術や考え方を学ぶという観点なら
http://www.apress.com/us/book/9781430262503 を勧める。

タイムマシンを販売するWebストアを作るという体で解説が進む。
(なぜタイムマシンなのかは最後に分かる)
名前に Beginning とあるが、Beginning なのは第1部だけで、
第2部以降は実戦色が強くなる。

この本の大きな特徴は、第2部以降は必要性が出てきた段階で、
必要な分だけ Haskell の構文やライブラリや技術などの解説がされることが多いこと。
たとえばアプリのリソースの扱い方を学ぶ段階で初めて
IOモナドによる入出力の解説が登場するのは当たり前だが、
それと同じ章で Conduit や Binary Serialization の解説が登場する。
実用的なアプリの作成において、これらでリソースを扱うのが非常に有用だからだ。

入門書では前半で出てくるような型がこの本では後半で出ることもある。
入門書をしっかり理解できているのなら適当に読み飛ばしたくなる所もあると思うが、
そこで作った型や関数は後で使うことが多いので、復習と思ってぐっと我慢すべし。

個人的には、アーキテクチャレベルの章が無いのが残念。
15デフォルトの名無しさん
2017/09/28(木) 01:51:54.14ID:z5y5Aaws
>>14
ありがとう!参考になりました
16デフォルトの名無しさん
2017/09/28(木) 14:01:26.19ID:UK21Udq4
ああ逃れられない(英語)
17デフォルトの名無しさん
2017/09/28(木) 21:10:48.47ID:6lr8pJs9
新しくでたHaskell本、田舎に住んでる自分的にはいい感じだわ。
著者の方をみると、東京とかの勉強会はこの辺を踏まえてるんだなと勝手に思ってる。
周りにHaskellerがおらず独りでやってるけど、実践的な面で何か取りこぼしがないかとの疑問が頭に残ってたから、これで安心。
18デフォルトの名無しさん
2017/09/28(木) 21:21:59.50ID:WvuzNAMn
明日給料入るから明日買うわ
19デフォルトの名無しさん
2017/09/28(木) 21:30:11.00ID:Oc+ilhlL
>>17
章末問題とか練習問題みたいなのある?
20デフォルトの名無しさん
2017/09/28(木) 21:30:19.44ID:DWFu7WOr
例えば、undefinedをAgdaのホールみたいに使えるとか知らんかった。
21デフォルトの名無しさん
2017/09/28(木) 21:33:24.87ID:hwFo+CWc
実際何か作ろうとなったときに今どのライブラリでどう作ればいいかの道筋を示す本はないから
そこをわかって出してくれてそうな今回の入門書に期待
22デフォルトの名無しさん
2017/09/28(木) 21:39:17.72ID:DWFu7WOr
>>19
ないね。
理論的な部分はこれまでの良書で固めて、
上で書いたような、俗っぽい(悪い意味ではない)部分を補充、といった感じかと。
23デフォルトの名無しさん
2017/09/28(木) 22:29:11.61ID:Ivu9Y1Xk
ところで、今Webアプリってブームなの?
みんなWebアプリを作りたくてウズウズしてんの?
24デフォルトの名無しさん
2017/09/28(木) 23:01:35.48
ゲーム作るならFRPなの?
どのパッケージがいいの? ヘルムって奴?
それ以前にFRPってどこで勉強すればいいの?
25デフォルトの名無しさん
2017/09/28(木) 23:10:45.38ID:hwFo+CWc
Elm、FRPやめたってよ
FRPと関数型のことは忘れろ
26デフォルトの名無しさん
2017/09/28(木) 23:22:12.38ID:64lLKNQd
Functional Reactive Programming - HaskellWiki
https://wiki.haskell.org/Functional_Reactive_Programming
27デフォルトの名無しさん
2017/09/29(金) 00:09:31.41
えええ。。。じゃあHaskellでゲームって、なんのライブラリ使って作るの
28デフォルトの名無しさん
2017/09/29(金) 00:22:48.95ID:6ZguHByP
自分で作ってみるのはどうでしょうか?
良いライブラリができたら公開してね!!
29デフォルトの名無しさん
2017/09/29(金) 00:41:18.81ID:Q5+RKusc
Game Development - HaskellWiki
https://wiki.haskell.org/Game_Development
30デフォルトの名無しさん
2017/09/29(金) 00:43:06.66ID:Q5+RKusc
Applications and libraries/Games - HaskellWiki
https://wiki.haskell.org/Applications_and_libraries/Games
31デフォルトの名無しさん
2017/09/29(金) 22:18:38.06ID:8tJM6rkq
HaskellによるゲームプログラミングにFRPを使うメリットがない。
32デフォルトの名無しさん
2017/09/29(金) 22:52:40.90ID:7WUGaaf4
みんなhaskellで何するの?
haskellのためのhaskellしてるみたいなイメージ
33デフォルトの名無しさん
2017/09/30(土) 00:36:23.25ID:rwsxidmc
自分の要求に応えてくれる言語を使ってるだけだよ
34デフォルトの名無しさん
2017/09/30(土) 04:13:52.83ID:F2cNQzRT
stackがあればハスケルコンパイラーインストール必要ないんやな。
全部消してやったぜ。
35デフォルトの名無しさん
2017/09/30(土) 22:19:25.30ID:zP5U//5z
神様ありがとう、ハスケルに会わせてくれて
君は眠っていたね
36デフォルトの名無しさん
2017/09/30(土) 22:52:16.35ID:m5JakNDN
>>32
C言語の倒し方を発見する
またはC言語を倒せないことを証明する
37デフォルトの名無しさん
2017/09/30(土) 23:59:21.19ID:VwrUR3UB
>>32
あえて言おう
自分自身の処理系を記述できない処理系はクソ
38デフォルトの名無しさん
2017/10/01(日) 11:01:26.12ID:evM2u7Ti
Eq クラスや Show クラスのように default deriving として使えるクラスを自作することはできますか?
39デフォルトの名無しさん
2017/10/01(日) 12:00:16.69ID:QSpmDYPw
>>38
14の本に書いてあった気がする
40デフォルトの名無しさん
2017/10/01(日) 13:29:55.56ID:00V/3sY4
Haskellによる関数プログラミングの思考法
Richard Bird (著), 山下伸夫 (翻訳)
https://www.amazon.co.jp/dp/4048930532/

この本ていいの?
すぐ教えろ
41デフォルトの名無しさん
2017/10/01(日) 15:15:55.43ID:hswT9xjT
C++ Rust Haskellは言語とライブラリを見るだけで楽しめるが
言語とライブラリはすぐ古くなるのがこわくて手を出せないやつが多いんだろうね
42デフォルトの名無しさん
2017/10/01(日) 15:37:36.06ID:sFjMHcln
待ってくれ
43デフォルトの名無しさん
2017/10/01(日) 15:52:51.93ID:evM2u7Ti
>>39
ありがとうございます。
その本を借りてみます。
44デフォルトの名無しさん
2017/10/01(日) 18:25:15.52ID:sFjMHcln
ああ逃れられない(英語)
45デフォルトの名無しさん
2017/10/01(日) 19:09:32.63ID:rx6vco2K
>>40
「関数プログラミング 珠玉のアルゴリズムデザイン」のための良い入門書って感じ
46デフォルトの名無しさん
2017/10/01(日) 19:34:05.63ID:sFjMHcln
珠玉難しすぎんよ〜
47デフォルトの名無しさん
2017/10/01(日) 20:13:16.82ID:O7TiEQTZ
珠玉は本気で難しい
48デフォルトの名無しさん
2017/10/01(日) 23:00:51.17ID:iMMA7lvE
>>12
tanakhはもうダメになった
https://twitter.com/tanakh/status/914454692440064000
49デフォルトの名無しさん
2017/10/02(月) 02:38:46.64ID:y6gYscpA
平常運転
50デフォルトの名無しさん
2017/10/02(月) 20:30:12.49ID:k+Xmo3sE
平壌運転
51デフォルトの名無しさん
2017/10/04(水) 19:37:39.13ID:F2K4hXU2
REPLでlet文ごっそり複数行貼れるんだね。
ちまちま一行ずつコピペしててバカみたいだったww
自分みたいなアホはあまりいないと思うけど、一応の注意喚起。
52デフォルトの名無しさん
2017/10/04(水) 22:05:05.88ID:oKe3mPnb
replというかコマンドラインの性質・・・
53デフォルトの名無しさん
2017/10/08(日) 22:00:05.12ID:JB+KF/At
Data.MapのfromListとtoListはキーが例えば自然数なら自動で昇順になるのですか?
確実を期すのであればfromAscListやtoAscListを使うべきですか?
54デフォルトの名無しさん
2017/10/08(日) 23:24:05.25ID:Zx8XGEkD
わざわざ別に作ってあるってことはそうやろなぁ
55デフォルトの名無しさん
2017/10/09(月) 07:02:48.85ID:xS+J1z7K
Functional Pearl って何? 自分で名乗ってもいいの?
56デフォルトの名無しさん
2017/10/10(火) 06:54:46.17ID:j0DthWV+
vectorパッケージでリスト内包表記的なのってありますかね?
また、ああいうsyntax sugarてユーザーが定義できるんでしょうか?
57デフォルトの名無しさん
2017/10/10(火) 07:19:08.32ID:IE9ZixgD
monad comprehensions
58デフォルトの名無しさん
2017/10/10(火) 10:01:50.47ID:j0DthWV+
>>57
ありがとうございました、見てみます。
59デフォルトの名無しさん
2017/10/15(日) 08:27:10.18ID:3zXjO+sA
bindの連結がよくわかってないので質問させてください

Just 10 >>= \x -> return (x + 1) >>= \y -> return (x + y + 2)
と書いた場合、明示的に括弧でくくるとしたら
Just 10 >>= \x -> (return (x + 1) >>= \y -> return (x + y + 2))
になりますよね?これが
Just 10 >>= \x -> return (x + 1) >>= \y -> return (y + 2)
の場合でも
Just 10 >>= \x -> (return (x + 1) >>= \y -> return (y + 2))
になるのですか?それとも
(Just 10 >>= \x -> return (x + 1)) >>= \y -> return (y + 2)
やあるいは別の場所がくくられますか?
下の場合どこでくくっても答えが同じなので混乱してきました
60デフォルトの名無しさん
2017/10/15(日) 18:20:04.06ID:amy6Q4J2
Just 10 >>= (\x -> return (x + 1) >>= (\y -> return (x + y + 2))
61デフォルトの名無しさん
2017/10/15(日) 18:23:23.93ID:amy6Q4J2
do
 x <- Just 10
 y <- return (x + 1)
 return (x + y + 2)



Just 23
62デフォルトの名無しさん
2017/10/15(日) 21:17:59.15ID:QaXk2fzN
カッコで括らない限りラムダ式のリテラルを使うとそれ以降はラムダ式の内側になるから
bindというか演算子に限らずa+\x->x+bみたいなのはa+(\x->x+b)
63デフォルトの名無しさん
2017/10/15(日) 21:42:24.61ID:Fr3WOscB
letやcaseはあまり使わないほうが推奨なんですか?

これに書いてあったので
http://d.hatena.ne.jp/kazu-yamamoto/20110826/1314352340
64デフォルトの名無しさん
2017/10/15(日) 21:44:11.18ID:QaXk2fzN
>>62
演算子の種類に限らず
65デフォルトの名無しさん
2017/10/15(日) 22:04:25.31ID:pVUBwS6g
>>63
好き好きでいいと思う。
66デフォルトの名無しさん
2017/10/15(日) 22:56:15.07ID:GYZBU1+2
>>63
let と where を同時に使わない、さえ守ればまあ。

https://wiki.haskell.org/Let_vs._Where

ちなみにcaseを使わないでパターンガードで書くと
ガードをまたげる where の方が書きやすいので
個人的にはまさにcaseもletも使わない
67デフォルトの名無しさん
2017/10/15(日) 23:23:28.47ID:E5HePsK2
使う意味がわからない
局所的なスコープの中だから式でないと書けないでもなければ使わない
68デフォルトの名無しさん
2017/10/15(日) 23:33:15.58ID:c/qV5Afw
>>66
いいこときいた!
69デフォルトの名無しさん
2017/10/16(月) 00:02:00.30ID:TY5gTDK1
値ならlet、関数ならwhereみたいな使い分けしてるわ
両方混ざることもしばしば
caseもdo構文の中とかで普通に使わね?
70デフォルトの名無しさん
2017/10/16(月) 03:01:45.14ID:Nb+0WxCX
左上から順番に読んで引っかかる時はlet使うかな。パターンガードはwhere一択だね。

baseパッケージを雑に調べたんだけど、総数はそれぞれ
where: 2038
let: 665
case: 979
71デフォルトの名無しさん
2017/10/16(月) 18:36:49.72ID:oTRCGw1x
そして余計な宗教戦争へ発展
72デフォルトの名無しさん
2017/10/16(月) 21:17:09.38ID:UKE6NQTo
foo = \ n -> let xs = map fib [0 ..] in xs !! n
bar = let xs = map fib [0 ..] in \ n -> xs !! n

宗教はいくつか掛け持ちする方がいい
nonlocalにすればlifetimeが長いとか便利な言葉が使える
73デフォルトの名無しさん
2017/10/16(月) 21:45:30.25ID:Nb+0WxCX
宗教で思い出したんだけど、みんなエディタは何使ってる?

https://github.com/rainbyte/haskell-ide-chart
Atom派が増えてきた気がする(Stepwise Debuggerってなんだろう)。
74デフォルトの名無しさん
2017/10/16(月) 23:03:58.10ID:wsZRBdk3
vscode+hie
75デフォルトの名無しさん
2017/10/16(月) 23:06:05.01ID:1r/tGA5g
vscodeいいよな
他の言語でも大活躍
76デフォルトの名無しさん
2017/10/16(月) 23:09:52.45ID:wsZRBdk3
vimのlanguage server対応がもっと進んだらvimに戻りたい
77デフォルトの名無しさん
2017/10/16(月) 23:13:43.26ID:RTfo5Gm3
https://wiki.haskell.org/Let_vs._Where#Problems_with_where
これ前者はクロージャみたいなものということなのかな
78デフォルトの名無しさん
2017/10/17(火) 01:54:05.70ID:kmqw2VEi
spacemacs + intero
79デフォルトの名無しさん
2017/10/17(火) 06:46:01.60ID:X7yOqbnN
HIE知らんかった。試してみよう。
自分もSpacemacsだわ。
80デフォルトの名無しさん
2017/10/17(火) 08:53:48.72ID:NQL+y7y0
プログラミングに限らず、およそ文字列を編集する作業において、
vim以外のエディタは考えられない体になってしまった。
81デフォルトの名無しさん
2017/10/17(火) 10:17:04.48ID:1Byit6P4
vscodeはvimがクソなのがな
82デフォルトの名無しさん
2017/10/17(火) 20:53:20.25ID:FkVJ0QE/
タイプミスが多いのでキー入力コマンド操作とか誤操作ばかりで死ぬ
83デフォルトの名無しさん
2017/10/17(火) 21:34:05.58ID:lwYxKvg3
CoqとかAgdaもやろうとしてたからEmacs一択で、
Vimの操作性も習得したいと思ってたから結果的にSpacemacsに落ち着いたわ。
84デフォルトの名無しさん
2017/10/17(火) 21:45:06.92ID:dWslrgIK
Spacemacs知れようとして、Emacsのバージョン足りなくて死んだ
85デフォルトの名無しさん
2017/10/17(火) 21:48:15.65ID:kmqw2VEi
静的どころか参照透明なんだし、補完は充実してほしいよなあ。

data Pen = Pineapple | Apple
apple = Apple
pen :: Pen
pen = a
もうこの時点で候補をappleに絞ってほしい。
86デフォルトの名無しさん
2017/10/17(火) 22:31:12.09ID:Is39GLXq
異教徒間の鍔迫り合いが始まる予感です?
87デフォルトの名無しさん
2017/10/17(火) 22:46:49.54ID:bTvRRU/M
そんな「絞り込み」はそもそもできないしすべきでもない
そもそもその例の場合なら完全に redundant だとしてむしろ積極的にappleを除外してほしい
88デフォルトの名無しさん
2017/10/17(火) 22:58:58.88ID:kmqw2VEi
>>87
できそうな気がするけど。
…-> Pen のような関数がないって事がわかってて、
penの型定義も限定されてるから、そこに書くことのできる値は限られてる。
89デフォルトの名無しさん
2017/10/17(火) 22:58:59.79ID:IqfDhIHj
>>85
その絞り込みの是非は置いておくとして、「参照透明」と「絞り込み」の関係がよく分からん。
その例だと、参照透明である必要はないと思うが。
90デフォルトの名無しさん
2017/10/17(火) 23:07:03.82ID:kmqw2VEi
>>89
そうだね。絞り込みについては静的であれば充分。
参照透明なら実行中に値が変わることがないから、例えばShowしたものを補完候補としてリストアップできる。
91デフォルトの名無しさん
2017/10/17(火) 23:16:36.80ID:bTvRRU/M
id やら const やらの問題はさておき
そこでもし仮に apple に絞られたら相当イラつく
92デフォルトの名無しさん
2017/10/17(火) 23:25:06.39ID:IqfDhIHj
>>88
その例なら簡単にできるけど、一般的には相当厳しいと思うよ。

型がシノニムだったら、辿って元の型を探さないといけないね。
import されてたら、それも全て辿らないといけないね。
template が使われてたら、展開しないといけないね。
Cプリプロセッサが使われてたら、これも展開しないといけないね。

型を決定するのに関わる事は他にもいっぱいある (言語拡張とか)。


あと、参照透明は破られないという前提で話してると思うけど、
unsafePerformIO 関数があることを忘れないように。
93デフォルトの名無しさん
2017/10/18(水) 11:52:10.17ID:LmQIn2MI
まずは自動車を二人で運転したり、独裁者が二人いる国を作ってみればいいのだ
それができたら一人を機械で置き換えて人間+機械のコンビを作る
94デフォルトの名無しさん
2017/10/18(水) 22:09:24.34ID:XAtaZZJd
Haskellでウェブアプリ作れますか?
95デフォルトの名無しさん
2017/10/18(水) 22:40:49.32ID:CCDizLJ7
>>94
作れるよ。
フレームワークもいくつかあるし、入門書もある。
96デフォルトの名無しさん
2017/10/18(水) 23:03:06.30ID:449CvZ10
webフレームワーク周りは一時期乱立とは言わないまでもだいぶ混乱してた印象があるけど
最近の流れはどうなってるんだろうか
97デフォルトの名無しさん
2017/10/18(水) 23:44:26.71ID:gezDC8oz
すみません、ある型とその取扱い関数の
標準・追加ライブラリでの有無の確認なのですが、

実数の範囲を表す型で(A,B)というのがあったとして
A以上B未満の範囲を示していて、
それがリストに[ s1, s2, s3, s4 ]の様に並べられているとして
その中身は[(0,1),(1,2),(2,4),(4,8)]としますと
実数「1.5」はこのリスト3番目の変数が示す範囲に
含まれますと教えてくれる関数なのですが、
このような型と関数があるライブラリを知っていましたら
教えて下さい。
98デフォルトの名無しさん
2017/10/18(水) 23:47:55.99ID:gezDC8oz
すみません。
「リスト2番目」の間違いでした。
99デフォルトの名無しさん
2017/10/18(水) 23:54:52.59ID:JBC50Xi/
Yesodの辛さを述べた記事を最近みた。
100デフォルトの名無しさん
2017/10/19(木) 00:31:32.35ID:IrC75yTx
最近なら servant が多いんじゃないか?
101デフォルトの名無しさん
2017/10/19(木) 00:42:33.76ID:IrC75yTx
>>97
ライブラリ探す暇があったら自分で書いたほうが早いだろ

import Data.List (find)

type Range = (Double,Double)
blah :: Double -> [Range] -> Maybe Range
blah x rs = find (¥(inf,sup) -> inf <= x && x <= sup) rs

ranges = [(0.0,1.0),(1.0,2.0),(2.0,4.0),(4.0,8.0)]

main = print $ blah 1.5 ranges
102デフォルトの名無しさん
2017/10/19(木) 00:55:37.69ID:a0gJXcH3
>>97
存在しない、と思う。
https://ideone.com/378zY1
103デフォルトの名無しさん
2017/10/19(木) 02:16:33.94ID:CTOkinld
まだイェソドが最強なのですか?
104デフォルトの名無しさん
2017/10/19(木) 07:52:00.67ID:NmeCWEht
イェソドってセフィロトの樹と何か関係あるの?
105デフォルトの名無しさん
2017/10/19(木) 11:32:05.27ID:yTKuENfR
辞書ファイルから欲しいデータを抜くのに使ってるけど、
Haskellだとライブラリ使うというより、
スクラッチで欲しい関数を書けるのが良いね。
調べるより作った方が早いし細かい調整がきく。
106デフォルトの名無しさん
2017/10/19(木) 15:41:04.63ID:a0gJXcH3
>>92
参照透明性を破壊するようなunsafeの使い方はするべきじゃない。
利用者に、穴の空いたトランポリンで跳ね回れと言ってるようなもんだぞ。
107デフォルトの名無しさん
2017/10/19(木) 18:16:54.99ID:XElZhSKt
>Haskellだとライブラリ使うというより、
>スクラッチで欲しい関数を書けるのが良いね。
> 調べるより作った方が早いし細かい調整がきく

小さいパーツ程度ならね
108デフォルトの名無しさん
2017/10/19(木) 18:41:26.50ID:TgxB2ED8
>穴の空いたトランポリンで跳ね回れ
いいなこれ。今度から使わせてもらうわ
109デフォルトの名無しさん
2017/10/19(木) 20:44:43.20ID:C59kUjZF
>>106
それは分かってる。
その意見には俺も全面的に賛成だよ。

ただ、やろうと思えばできてしまうんだよ。
例えばコマンドラインパーサーの CmdArgs パッケージでは unsafePerfirmIO が使われてる。
(なかなか使い勝手が良いライブラリなのに玉に瑕で残念)

だから、参照透明が保たれているという前提で補完機能を作るわけにはいかない。
110デフォルトの名無しさん
2017/10/19(木) 21:28:00.48ID:a0gJXcH3
一般的には透明性が保たれてるならunsafeを使っても大丈夫だよね。
FFIでCのライブラリを使って値を取ってくる時に、引数で返り値が一意に決まるならば、必ずしもIOで包まなくてもいい。

補完システムでは、プログラミング中に値を得ることを考えてるので、制限はもっと厳しい。
悪意のある誰かがコード中にunsafePerformIOでディスクを皿にするコードを入れていたとする。
現状では実行しなければ問題ないけど、その補完システムではエディタに読み込んだ時点で… ふっ飛ぶ!

アドバイスは的を得ていると思う。指摘を受けて、SafeHaskellでのみリッチな補完が出来る。という回避を考えているよ。
111デフォルトの名無しさん
2017/10/19(木) 21:31:47.78ID:a0gJXcH3
>>109 CmdArgs パッケージは、初見だけど… うーん。なぜこんな風になってるんだろう。
IOにするわけにはいかんのだろうか?
112デフォルトの名無しさん
2017/10/19(木) 21:38:26.29ID:IrC75yTx
Haskell使ったプロダクションコードにしばしばあるやつね
環境変数みたいなのは Reader で引き回すよりさっくり
unsafePerformIO でアレするのがアレでね
113デフォルトの名無しさん
2017/10/19(木) 21:41:05.61ID:a0gJXcH3
だいたい判った。この用途では仕方ない。
114デフォルトの名無しさん
2017/10/19(木) 21:42:06.30ID:IrC75yTx
>>107
>小さいパーツ程度ならね

その小さなパーツを見通しよく組み合わせられるあたりが功徳なんでねえ
115デフォルトの名無しさん
2017/10/19(木) 21:51:43.24ID:TgxB2ED8
unsafePerformIO取締法違反でタイポする!
116デフォルトの名無しさん
2017/10/19(木) 22:14:05.51ID:n4u77snN
コンパイラがしゃべった!?って、ただの腹話術か
いっつも腹話術してるな
117デフォルトの名無しさん
2017/10/19(木) 23:17:00.35ID:55bDTs5O
あれ?評価が、遅れて、されるよ?
11897
2017/10/19(木) 23:19:50.69ID:q5MeOdeo
>>101
>>102
ありがとうございます。
書いて下さったコードを参考にし、利用させて頂きます。
119デフォルトの名無しさん
2017/10/20(金) 09:50:03.15ID:Bz70yab6
>>112
そんな事すると、何のために Haskell を使ってるのか分からん
120デフォルトの名無しさん
2017/10/20(金) 11:11:48.75ID:zpEeQZDE
じゃあ「分かるHaskell」と「分からんHaskell」の両方を使いこなせばいいよ
そういう多様性を何のために肯定するのかっていうと
未知の新しい言語を見た瞬間に使いこなすための練習だと思えばいいんじゃないか
121デフォルトの名無しさん
2017/10/20(金) 13:24:48.13ID:f6ubOuco
>>120
そういうのは趣味や個人の時間にやって備えておくもので、
プロダクション(本番)でやるものではないと思う。
122デフォルトの名無しさん
2017/10/20(金) 13:41:07.05ID:Lk8bVHte
まあ、プロダクションだとやっぱり時折 unsafe 唱えるわけだけど
どういうときに唱えても已むを得ないかの知識が秘伝のタレ化してる感はある
123デフォルトの名無しさん
2017/10/20(金) 17:24:25.31ID:zpEeQZDE
x = unsafePerformIO m
main = do {
safe_x <- return $! x;
...
}
これで無難な値を無難なタイミングで取り出せる
ただし、mainを2回実行したらmは何回実行されるべきかの知識が秘伝
124デフォルトの名無しさん
2017/10/20(金) 17:32:08.06ID:GdkUB6y1
unsafe* を使用する際は逐一稟議を通すこと
125デフォルトの名無しさん
2017/10/20(金) 17:57:47.07ID:gxUn2vL9
unsafeReadとunsafeWriteの詳しい説明や使い方がわかる書籍やサイトがあれば教えてください
126デフォルトの名無しさん
2017/10/20(金) 18:14:08.30ID:Vljj85av
グローバル定数とみなせる値を取得したい + 使う場所がMonadIOでない + 設計変更の時間はない
127デフォルトの名無しさん
2017/10/20(金) 18:38:52.46ID:zpEeQZDE
使用したいというより読みたいんだよ
ありのままの現実を読む主義
現実を操作するつもりはない
128デフォルトの名無しさん
2017/10/20(金) 22:15:19.17ID:YXH4kbKq
Haskellやったら特別になれるの?
129デフォルトの名無しさん
2017/10/20(金) 22:37:34.15ID:rG34NDiA
疎外感を味わえます
130デフォルトの名無しさん
2017/10/20(金) 23:04:24.26ID:Vljj85av
そうならなくて済むよう、普及にもう少し力を入れる必要があるよね。

何があれば賑わうかって考えたんだけど、やっぱりもっと和書が必要ではないか。
「Haskellでゲームを作る本」とか「Haskellで解る圏論入門」とかどうだろう。
131デフォルトの名無しさん
2017/10/20(金) 23:22:26.18ID:ut8tKZ1b
Haskellなら三ヶ月後、自分で書いたコードを読めます
132デフォルトの名無しさん
2017/10/21(土) 00:05:14.21ID:yOthW/dM
>>131
そんな楽観はできない。

3ヶ月後も読めるようにするには、それなりのコードを書かなければならない。
Haskellなら自然にそういうコードになる、なんてことは全くないよ。

1つの関数に複数の仕事をさせてしまったり、
let節やwhere節で計算のフローを書いて関数を肥大化させてしまったり、
逆に一行に押さえようとポイントフリーをやりすぎて暗号化してしまったり、
仮引数の名前を短くしすぎて役割が分からなくなってしまったり、
モナド変換子のスタックをややこしくしてしまったり。

意識していないと陥りやすい罠は幾らでもある。
133デフォルトの名無しさん
2017/10/21(土) 00:23:56.54ID:4Fwr4eN0
https://ideone.com/880zvK
134デフォルトの名無しさん
2017/10/21(土) 00:58:52.37ID:Sgt31MqE
>>132
いや、131は揶揄・皮肉だと思う。何スレか前にあった俗説「Haskellでは3ヶ月前に書いた自分のコードが読めなくなる」に対しての。
理由は確か、Haskellでは習熟するにつれてコードが全然違ってくるから、だったかな。
未熟だった頃の考え方とかをスッカリ忘れてしまうので、読んでも頭に入ってこない。

133のコードから漂う、Java上がり臭… 真面目に書いたのも見て取れるんだけど、標準の関数や表記法とズレているのでどうにも読みにくい。

いまstackのコードを読んでるんだけど、意図してコードのレベルを抑えてるフシがある。const を使わずに \_->... と書いてたり。
練度の高低でコードが違ってくることはある意味で良いことといえるのかもしれないけど、多人数で使う際には難しさがあるようだ。
135デフォルトの名無しさん
2017/10/21(土) 01:24:40.12ID:E5Mq7+kB
https://ideone.com/q2RCBe

これは >>133 のほぼ 1/10 の行数で書かれている

solve = build “” “”

という行を見て
「ああアキュムレータが2つあるのね」
とわかるのであとはそのまま読むだけ
136デフォルトの名無しさん
2017/10/21(土) 01:35:46.03ID:E5Mq7+kB
というか、>>133 のコードはこれはネタでわざとやってるな
137デフォルトの名無しさん
2017/10/21(土) 04:25:54.74ID:Sgt31MqE
うひょーッ iOS & Android の ghc バイナリが来た!
http://hackage.mobilehaskell.org/
解説ページ
https://medium.com/@zw3rk/ghc-cross-compiler-binary-distributions-490bb2c0c411
138デフォルトの名無しさん
2017/10/21(土) 06:39:56.81ID:M5O/aj/a
何が始まるんです?
139デフォルトの名無しさん
2017/10/21(土) 12:52:45.37ID:JKqQJ+2p
自分で書いたコードが、他人が書いたコードと同じに見える

これは普通
同じ書き方をしない方が異常
3ヵ月前の時点ですでに他人が書いたコードと同じに見えていい
140デフォルトの名無しさん
2017/10/21(土) 17:28:30.51ID:lv/AbapF
>>135
Data.Mapでもっと単純に書けそうな気がしたけど気のせいだった
https://ideone.com/R4dQIW
141デフォルトの名無しさん
2017/10/21(土) 21:05:29.77ID:sahtjmhq
>>124
稟議のロジックをHaskellで書いてくれ。
142名無しさん@そうだ選挙に行こう! Go to vote!
2017/10/22(日) 09:33:44.39ID:IsEvYiKq
アキュムレータのように引数で変数束縛するのはprologっぽい書き方

haskellならアキュムレータの代わりにwhereを使う手がある
makeMaximumSizeAndMinimumOrderPalindrome wordlist = xs ++ [y] ++ zs where ...
143名無しさん@そうだ選挙に行こう! Go to vote!
2017/10/22(日) 14:42:07.09ID:b60KFBOe
Intellij IDEAのIntellij-Haskellプラグインが上手く実行できなくて諦めかけてたけど改めて挑戦したらやっとできた
これで俺もIDEデビューだ
開発効率上がるといいな
144名無しさん@そうだ選挙に行こう! Go to vote!
2017/10/22(日) 15:26:27.37ID:mN+j7loz
アキュムレータの意味がわかってないキチガイがいるのか……
145デフォルトの名無しさん
2017/10/26(木) 22:30:22.73ID:/i1iouMm
ByteStringについて、↓の記事に
「使い方の結論を述べると、入力には正格 ByteString、出力は遅延 ByteString を用います」
と書いてあるのですがそうなんですか?
だとしたらなぜそうなるのか教えていただけますでしょうか

http://d.hatena.ne.jp/kazu-yamamoto/touch/20110525/1306298046
146デフォルトの名無しさん
2017/10/27(金) 19:45:49.01ID:is9IZ5oJ
CodinGameをHaskellで攻略した方の感想ください

https://www.codingame.com/
147デフォルトの名無しさん
2017/10/28(土) 17:22:18.77ID:sV/HPdac
Prelude> let a = 0.3 - 0.2
Prelude> let b = 0.2 - 0.1
Prelude> let c = a == b
Prelude> print c
False

は?

Prelude> default (Rational)
Prelude> let a = 0.3 - 0.2
Prelude> let b = 0.2 - 0.1
Prelude> let c = a == b
Prelude> print c
True

満足〜♪ 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
148デフォルトの名無しさん
2017/10/28(土) 17:23:34.06ID:sV/HPdac
> 入力には正格 ByteString、出力は遅延 ByteString
これ俺も疑問に思ってた
149デフォルトの名無しさん
2017/10/28(土) 17:37:14.16ID:vt4jCtcJ
実装上の都合です
理論的には何の根拠もございません
150デフォルトの名無しさん
2017/10/28(土) 17:45:11.92ID:zE41SC6F
メモリ的には入力遅延のほうがよさそうだけどハンドルをすぐ解放するために正格ということかな
151デフォルトの名無しさん
2017/10/28(土) 19:05:35.06ID:nHlzoa71
512MB of zeroes with different implementations of echo

関数型プログラミング言語Haskell Part31©2ch.net	->画像>6枚
152デフォルトの名無しさん
2017/10/28(土) 20:19:14.51ID:zE41SC6F
どの本だっけ、Real World?
153デフォルトの名無しさん
2017/10/28(土) 20:46:38.08ID:DenCC8QE
出典はHaskell High Performance Programmingです
154デフォルトの名無しさん
2017/10/28(土) 21:00:26.16ID:zE41SC6F
それか
読みたいと思ってたんだよなそれ
邦訳はよ
155デフォルトの名無しさん
2017/10/29(日) 00:46:23.62ID:UfAXS2oV
>>151
正格ByteStringが遅延に買ってる部分ないのか
156デフォルトの名無しさん
2017/10/29(日) 07:47:46.53ID:U58o7DSK
普通に配列とリストの違い
ただしリストの要素は32kの配列
157デフォルトの名無しさん
2017/10/29(日) 09:00:08.15ID:vzk3gwxY
WAI の実装とかそういう凄え特殊な場面での話だろうな
リソース管理が死活の場面では Lazy IO がワリと死ねるので

でもそういうのはいまなら各種の streaming ライブラリでOK
158デフォルトの名無しさん
2017/10/29(日) 22:14:12.00ID:HYvWAe4Y
foldr と foldl ってこんな風に作れるよね。

foldr :: (a -> b -> b) -> b -> [a] -> b
foldr _ i [] = i
foldr f i (x:xs) = f x (foldr f i xs)

foldl :: (b -> a -> b) -> b -> [a] -> b
foldl _ i [] = i
foldl f i (x:xs) = foldl f (f i x) xs

なんで foldl より foldr の方がメモリ効率がいいのか分からん。
どっちも結果の値が評価されるまで式が数珠繋ぎになったままじゃね?
159デフォルトの名無しさん
2017/10/29(日) 22:32:56.88ID:SX8DMS20
これ?

Haskell の畳み込み関数 - foldl, foldr | すぐに忘れる脳みそのためのメモ
http://jutememo.blogspot.jp/2008/06/haskell-foldl-foldr.html
160デフォルトの名無しさん
2017/10/30(月) 00:11:55.76ID:kEApsxXD
競プロでhaskell使う場合の何かアドバイスください

この問題解けませんでした
https://yukicoder.me/problems/no/583
https://yukicoder.me/submissions/212458
161デフォルトの名無しさん
2017/10/30(月) 00:12:43.74ID:XzbjUl3p
今はコンパイラに解決させるようにしているようだね
haskell - Foldl memory performance in GHC 8.0.x - Stack Overflow
https://stackoverflow.com/questions/42747159/foldl-memory-performance-in-ghc-8-0-x
162デフォルトの名無しさん
2017/10/30(月) 00:31:06.68ID:VIeJ5TeT
中身としてはこれかな
foldlを直す - 純粋関数空間 http://tanakh.jp/posts/2014-04-07-foldl-is-broken.html

>>158のように素直に定義したらどっちでも変わらないのはその通りで、
foldlの方は末尾再帰の形になってるからseqすることでいい感じに動いてくれる
163デフォルトの名無しさん
2017/10/30(月) 08:02:56.80ID:WTE/ZW3E
>>162
> >>158のように素直に定義したらどっちでも変わらないのはその通りで、

やっぱり。
これを聞いて安心した。
みんな、ありがと。
164デフォルトの名無しさん
2017/10/30(月) 08:39:48.03ID:rELgjW3C
foldlを使うことってほぼない気がする
だいたいfoldl'を使ってる
165デフォルトの名無しさん
2017/10/30(月) 08:42:25.25ID:WTE/ZW3E
>>160
その問題は、要するにグラフが準オイラー路になっているかどうかを判定するものだよ。

各駅を頂点、各路線を辺とするグラフが、
準オイラー路であれば彼らは計画達成できるし、
そうなっていなければ計画は達成できない。

グラフが準オイラー路であることと、
次数が奇数の頂点がちょうど2つ存在することとは同値。

要するに、一筆書きができるかどうかだよ。

Haskell で素直に拙くプログラムしても特に問題ないだろうね。
たとえば、N個の要素を持つInt型配列にaccumArrayで次数を集計して、
filterで奇数だけ濾し取り、要素数を調べる。
166デフォルトの名無しさん
2017/10/30(月) 08:46:34.46ID:I1PPVtSx
>>164
最適化で正格になるはずだけど明示的に正格版使う必要ある?
167デフォルトの名無しさん
2017/10/30(月) 08:49:38.37ID:WTE/ZW3E
>>160
すまん、準オイラー路を判定する前に、
連結グラフかどうかを調べる必要があった。
168デフォルトの名無しさん
2017/10/30(月) 09:33:39.10ID:032bj4sa
haskellで連結判定って面倒そう
169デフォルトの名無しさん
2017/10/30(月) 11:24:36.92ID:WTE/ZW3E
>>160
>>168
準オイラー路かどうかを判定する前にと言ったけど、
後の方がいいな。

正確には、次数が奇数の頂点がちょうど2つあることを確認した後で、
その2つの頂点間に道があればOKとする。

これなら、そう面倒でもないような気がする。
170デフォルトの名無しさん
2017/10/30(月) 11:28:25.84ID:WTE/ZW3E
>>169
ごめん、ダメだな。

素直にシードフィルみたいに辿っていくしかないか。
171デフォルトの名無しさん
2017/10/30(月) 11:57:14.99ID:I1PPVtSx
最適化O2からなの忘れてたすまん
172デフォルトの名無しさん
2017/10/30(月) 12:01:00.21ID:WTE/ZW3E
>>160
Haskell が得意なアルゴリズムは分割統治なので、
できるだけ分割統治で解けないか考える、
というのが一般的なアプローチ。

だけど、この問題はそれでは解けそうもないので、
他の命令型言語と同じアルゴリズムを使うしかないと思う。

で、これは一筆書き問題なので、
「連結グラフがオイラー路かまたは準オイラー路なら一筆書き可能」
という定理を利用することになる。

オイラー路や準オイラー路の判定は簡単。

肝は連結グラフの判定だけど、これはもう素直に調べるしかない。
普通ならグラフ用ライブラリを使うところだけど、
競技ならまず使えないだろうから、2次元配列を使ってグラフを表現する。
そして頂点をひとつ決めて、そこから全頂点を辿れるか調べる。

これしかないね。
Haskellにはとことん向かない問題だと思う。
173デフォルトの名無しさん
2017/10/30(月) 12:13:21.53ID:/4xzRH5O
Haskellわからんからわからんのだがこれとか簡単にかけてそうなんだがそうでもないのか?
https://yukicoder.me/submissions/213035
174デフォルトの名無しさん
2017/10/30(月) 12:24:13.36ID:oL0091Lz
>>173
連結性の判定を忘れてた
175デフォルトの名無しさん
2017/10/30(月) 12:25:22.45ID:/4xzRH5O
>>174
よく見たらWrong Answerだったわ...orz
176160
2017/10/30(月) 20:27:20.42ID:kEApsxXD
>>165-175
助言ありがとうございました
Haskellは分割統治が得意、連結判定苦手で覚えます
177デフォルトの名無しさん
2017/10/30(月) 22:41:45.81ID:bEDc9q0a
連結判定だけじゃなくてグラフがらみは総じて苦手じゃないかな
178デフォルトの名無しさん
2017/10/31(火) 01:03:17.65ID:hkKKSLGp
コンパイラはグラフ簡約するのに言語はグラフ苦手なのかよお
179デフォルトの名無しさん
2017/10/31(火) 01:46:52.15ID:HrVASABH
つうか制約のない連結性の判定を深さ優先探索でするのは別にHaskellのせいじゃないだろ
180デフォルトの名無しさん
2017/10/31(火) 03:22:06.20ID:mBYeMGb0
グラフ苦手って競技プログラミングで使う場合のみやろ?普段使う分にはグラフライブラリに突っ込めばいいだけやし気にする必要無いやで!
181デフォルトの名無しさん
2017/10/31(火) 08:27:49.90ID:v6NvB8KL
ライブラリでも、計算量は多くなるよね?
182デフォルトの名無しさん
2017/10/31(火) 08:33:52.06ID:ipWwIy6g
わざわざ車輪の再発明させる競プロってなんなん
183デフォルトの名無しさん
2017/10/31(火) 08:44:38.36ID:DbaXyY3l
Data.Array.(!) や Data.Vector.(!) って O(1) でアクセスできるんですか?
純粋な関数型言語でそんなこと可能なのですか?
184デフォルトの名無しさん
2017/10/31(火) 08:50:21.95ID:DbaXyY3l
>>182
その方が面白いからだと思いますよ。
コードゴルフとかと同じですよ。
制約があった方が燃えます。
185デフォルトの名無しさん
2017/10/31(火) 10:02:54.23ID:HrVASABH
>>183
>Data.Array.(!) や Data.Vector.(!) って O(1) でアクセスできるんですか?
>純粋な関数型言語でそんなこと可能なのですか?

読む分にはO(1)に決まってる
そもそもData.Vectorのドキュメントに様々な関数の計算量が書いてあるだろ
186デフォルトの名無しさん
2017/10/31(火) 10:40:05.74ID:DbaXyY3l
>>185
要素数に依存しない計算量で構造から読み取るなんて、
純粋な関数だけでどうやって実現するの?
不思議すぎない?
187デフォルトの名無しさん
2017/10/31(火) 11:15:03.94ID:HrVASABH
はあ?
インデクスからメモリ上の位置(たとえばポインタ)へのO(1)な関数があればいいだけだろ
通常の配列もハッシュも変わらん
188デフォルトの名無しさん
2017/10/31(火) 11:25:52.68ID:u1zcRbeB
ライブラリとして提供されてるからそうであって、
Haskellの構文としては書けないって話では?
189デフォルトの名無しさん
2017/10/31(火) 11:28:55.70ID:0GSWnPMN
>>187
キッシヨ
190デフォルトの名無しさん
2017/10/31(火) 11:31:18.73ID:0GSWnPMN
ミスった
キスしよ、な
191デフォルトの名無しさん
2017/10/31(火) 11:33:38.62ID:DbaXyY3l
>>187
そのO(1)な関数は純粋関数型でどうやって実現してるの?
俺はすげー不思議、という話だよ。
192デフォルトの名無しさん
2017/10/31(火) 11:36:03.56ID:K+wdnCfv
純粋データ型のオブジェクトはすべて構築物
(つまり既存のオブジェクトから構築されたもの)
という視点を持たないとこの手の話は一生理解できんと思う
193デフォルトの名無しさん
2017/10/31(火) 11:46:17.59ID:DbaXyY3l
>>192
このあたり、「純粋関数型データ構造」って本で勉強できる?
それともあの本は関係ない?
194デフォルトの名無しさん
2017/10/31(火) 13:07:49.38ID:xZzZlui7
1 = \x _ _ ... -> x
2 = \_ x _ ... -> x
3 = \_ _ x ... -> x
~
という自然数を定義すれば
\i -> i a b c ...
で参照O(1)な配列の出来上がり
195デフォルトの名無しさん
2017/10/31(火) 13:20:29.54ID:DbaXyY3l
>>194
それじゃあ、Data.Vector みたいに動的に生成できないでしょ。

ワザととぼけてるの?
それとも話の流れ分かってない?
196デフォルトの名無しさん
2017/10/31(火) 13:30:02.62ID:xZzZlui7
>>195
\x y z ... -> \i -> i x y z ...
197デフォルトの名無しさん
2017/10/31(火) 13:43:09.29ID:xihCdoaS
C言語で実装してラップしてんじゃないの(知らんけど)
198デフォルトの名無しさん
2017/10/31(火) 13:47:50.97ID:DbaXyY3l
>>196
すげーおまえ頭いいなって思ったが、すまん、
こっちの頭が悪すぎた、まだ何となくしか理解できん。

たとえば、リストから一次元配列を作る関数をつくってくれないか?

ずうずうしいと思ったら、ヒントだけでも。

fromList :: [a] -> 配列型 a
fromList xs = ムニャムニャ
199デフォルトの名無しさん
2017/10/31(火) 15:36:16.62ID:xihCdoaS
C言語で実装してラップしてんじゃないの(知らんけど)
200デフォルトの名無しさん
2017/10/31(火) 15:50:28.40ID:xZzZlui7
>>198
いやチャーチエンコーディングのパクリだよ
fromList xs = foldl ($) (\x y z ... -> \i -> x y z ...) xs
実際は型チェックが通らないからアキュームレーターの関数を
data Func a b = Res b | Func (a -> Func a b)
みたいな型で作って結果をパターンマッチすればいい
201デフォルトの名無しさん
2017/10/31(火) 16:16:10.45ID:DbaXyY3l
>>200
ありがと

あかん、頭の中で考えてても理解できん、
と言うかスッキリしない。
家に帰ったらじっくり勉強してみるよ。
202デフォルトの名無しさん
2017/10/31(火) 18:15:23.97ID:gU/sNGWK
競プロで使えるグラフライブラリにData.Graphってのあるのな

Data.Graph
https://hackage.haskell.org/package/containers-0.5.10.2/docs/Data-Graph.html
203デフォルトの名無しさん
2017/10/31(火) 19:08:38.44ID:1toVIYFj
>>202
上の問題でverticesとreachableの長さを比較すればと思ったら
verticesは辺の無い頂点も列挙する仕様だったわ
まあGraphの中身はリストの配列だから自分で数えればいいんだけど
204デフォルトの名無しさん
2017/10/31(火) 21:49:16.80ID:uNFhbghr
関数合成ってhoge.piyoよかhoge . piyoの方が可読性高い?
205デフォルトの名無しさん
2017/11/01(水) 00:06:04.05ID:viv8LMSD
>>204
スペース無しドットはモジュールの名前空間の表現に使うから
関数合成は後者で書く方がいいよ
モジュール名は大文字で関数名は小文字だからコンパイラは間違えないけど
206デフォルトの名無しさん
2017/11/01(水) 00:26:27.90ID:llNAjsKg
hackageのソースコード見ても合成のドットは離して書いてるの多いね
207デフォルトの名無しさん
2017/11/01(水) 00:27:10.19ID:WlWR964+
>>205
やっぱりそうですか
ありがとうございます
208デフォルトの名無しさん
2017/11/01(水) 01:06:06.52ID:Fgn1cTLB
人間も間違えねえよってつっかかってくる人昔みかけた
そういう人が出たら、宗教戦争やめろっていうつもりだったのに
209デフォルトの名無しさん
2017/11/01(水) 07:53:11.67ID:DzcCU70V
「大文字と小文字を間違えない」の主語は何かの戦争か
そもそも主語を書く必要があるのか
210デフォルトの名無しさん
2017/11/01(水) 09:43:47.82ID:55me074h
データコンストラクタも大文字なので(ry
211デフォルトの名無しさん
2017/11/01(水) 11:37:03.55ID:DzcCU70V
最初の文字が大文字やドットなら特別な意味がありそう
最初ってどこなのかは正規表現で定義すれば間違いなさそう
212デフォルトの名無しさん
2017/11/04(土) 23:17:33.32ID:GxslH7p8
リスト内包表記がdo表記に一対一に対応するのは知っていますが、
言語拡張 TransformListComp によって拡張されたリスト内包表記も、
一対一に対応するdo表記があるのでしょうか。

then group by e using f の働きがどのような仕組みなのかよく分からないので、
対応するdo表記を調べて理解を深めたいです。
213デフォルトの名無しさん
2017/11/05(日) 08:59:13.86ID:BXN9Zljm
>>212
>対応するdo表記を調べて理解を深めたいです。

どうぞそうなさって結果をスレにてご報告ください。
214デフォルトの名無しさん
2017/11/05(日) 11:02:14.73ID:33a+kqna
>>213
いろいろ実験したり、GHCのユーザーガイドを読んだりしたところ、
then group by p using f の働きが理解できました。

しかし、結局のところ対応するdo表記は分かりませんでした。
そんなものはもともと無いのかもしれません。
もしかしたらCoreを出力してみると何か分かるかもしれませんが、
自分の中ではもう問題が解決しているので、そこまで調べるモチベーションがありません。
なので、ここでその結果を報告することはできません。

代わりに、then group by p using f がどのような働きになっているのか、
私の知見だけでも述べた方が良いでしょうか。
215デフォルトの名無しさん
2017/11/05(日) 13:47:42.35ID:iHS/FHvi
知見は歓迎です
216デフォルトの名無しさん
2017/11/05(日) 14:29:15.46ID:g7Wivisu
https://downloads.haskell.org/~ghc/7.8.3/docs/html/users_guide/syntax-extns.html#monad-comprehensions
> D[ e | Q then group by b using f, R ] = f (\Qv -> b) D[ Qv | Q ] >>= \ys ->
> case (fmap selQv1 ys, ..., fmap selQvn ys) of
> Qv -> D[ e | R ]
> where Qv is the tuple of variables bound by Q (and used subsequently)
> selQvi is a selector mapping Qv to the ith component of Qv
別にモナドで定義されてるからdoで定義してもいいけど
Qvから要素を取り出す方法がアドホックにしか書けないから
doを使わないにしろ一対一で対応するようには書けない
217デフォルトの名無しさん
2017/11/05(日) 18:08:38.19ID:Rt4/SB7E
Haskellの表記を楽にする6つのghc拡張 - Qiita
https://qiita.com/philopon/items/b812e43128654245e42d
218デフォルトの名無しさん
2017/11/05(日) 23:15:17.53ID:s0bBqtdw
>>217
MultiWayIfとBinaryLiterals以外は可読性落ちとるやないかーい
219デフォルトの名無しさん
2017/11/05(日) 23:28:42.70ID:33a+kqna
>>212 です。

then group by p using f の働きはいろいろ不思議な部分があるのですが、
すべての疑問は、then group by p using f で使う関数 f :: (a -> t) -> [a] -> [[a]] の第1引数は
どのような関数が渡されるのか、ということに集約されました。
(それが分かって初めて、これは then f by p の f でも同じだと気づきましたが、
こちらでは理解につまづかない程度の簡単な例しか扱っていなかったので)

この関数 f は、then group by p using f が現れるより左にある全てのバインダを要素に持つ組から p への関数
と考えれば納得がいきました。

たとえば、
[ (x, y) | x <- [1,2,1], y <- "ok", then group by x using groupWith]
ですと、then より左のバインダを要素に持つ組というのは、つまり
<1, o>, <1, k>, <2, o>, <2, k>, <1, o>, <1, k> といった組です。
(実際に内部で使われている実際のデータ型は分かりません)

このような組から x への関数なので、
g <1, o> = 1
g <1, k> = 1
g <2, o> = 2
g <2, k> = 2
という関数です。
このような関数 g が groupWith 関数の第1引数に渡されると考えると辻褄が合いました。
220デフォルトの名無しさん
2017/11/13(月) 22:38:59.83ID:GpiHsSLN
haskell始めてみたいんだけどまだプログラミング能力があまりないので不安
他の言語をどれくらい書けるようにしておくべき?
221デフォルトの名無しさん
2017/11/13(月) 23:15:58.10ID:IehbHsjb
むしろ手続き型言語に慣れ親しんだ脳みそだと関数型は取っ付きにくいから
いきなりHaskellでいいと思うよ
222デフォルトの名無しさん
2017/11/13(月) 23:27:39.67ID:ZUv/XWe7
>>221
Masterminds of Programming という本で Haskell 委員会のひとりが、
他言語をちゃんとできるヤツはHaskellも上手く使える、という趣旨のことを言ってた。
223デフォルトの名無しさん
2017/11/13(月) 23:30:10.81ID:ZUv/XWe7
>>221
それどころか、いきなりHaskellをやるのはお勧めしない感じだった。
224デフォルトの名無しさん
2017/11/13(月) 23:30:57.19ID:PxhTPMZi
>>222
「ちゃんと出来る」の意味が、常人と違う予感。
225デフォルトの名無しさん
2017/11/13(月) 23:42:04.93ID:dMdke9KA
いきなりHaskellの難点はどのHaskell入門書籍やサイトも基本的なプログラミング知識を前提としちゃってるとこかな
変数とか関数とかリストとかマップとか
でもHaskellというか関数型パラダイムにできるだけ早い時期から触れとくのは良いことだと思う
226デフォルトの名無しさん
2017/11/14(火) 00:36:12.17ID:XSI09cgL
>>220

『プログラミングの基礎』浅井健一

でOCamlやってからHaskellに逝くのが一番簡単な導入
227デフォルトの名無しさん
2017/11/14(火) 00:42:09.25ID:Meoq/IF/
SICP読んでからhaskellやるのは大丈夫?
228デフォルトの名無しさん
2017/11/14(火) 02:30:14.88ID:RezF4qhu
Haskellは日本語どころか
英語でググっても答えが見つからない問題にぶち当たる率が
他のメジャーな言語と比べると高すぎるから初学者向きじゃないよ

もくもく会に参加したり、Stack Overflowで質問したりと
双方向的な方法を挟まないと一定以上に到達するのは難しい
229デフォルトの名無しさん
2017/11/14(火) 11:28:30.93ID:eZNGHHYs
問題自体が難しい
だから答えが見つからない
と解釈するのが自然

問題自体をよく見ようとせず、SEOや脳味噌のことを考えるのは的外れだと思う
230デフォルトの名無しさん
2017/11/14(火) 19:55:37.30ID:0CBPSjnu
ocamlの元のmlで挫折しそうになった。
f#がたのしい
231デフォルトの名無しさん
2017/11/14(火) 20:17:46.83ID:WUG8DCiI
例えばC言語の楽しさを1とすると
haskell,ocaml,f#の楽しさはどれぐらい?
232デフォルトの名無しさん
2017/11/14(火) 21:11:59.47ID:eZNGHHYs
F#はC#の知識を前提とすることを許可されている感がある
箸の上げ下ろしどころか知識を得るのにも許可を必要とする異常な環境に適応したのがF#
233デフォルトの名無しさん
2017/11/14(火) 22:22:03.84ID:0CBPSjnu
f#はなんかこう昔懐かしbasicの関数型言語版のよう
な気がする。
234デフォルトの名無しさん
2017/11/14(火) 22:22:45.27ID:0CBPSjnu
haskell構文がやだ。
235デフォルトの名無しさん
2017/11/14(火) 22:58:23.51ID:LvvrWEBo
>>234
たとえば、どんな構文が?

遅延評価とか参照透過性とか厳密な型付けとか、そういうのを嫌う人はいっぱいいたけど、
構文が嫌って人には初めて出会った。
236デフォルトの名無しさん
2017/11/14(火) 22:59:13.88ID:wshk46M/
F#固有のライブラリ使ったことないな
構文的にC#よりF#楽
あとはHaskell並みの肩推論あれば文句ないんだけど
Haskellは遅延評価使いどころを見つけづらい
237デフォルトの名無しさん
2017/11/14(火) 23:31:10.95ID:lH5WJrT0
結構凝ってるみたいっすねえ
238デフォルトの名無しさん
2017/11/15(水) 01:49:26.34ID:9iJNvTMA
むしろ構文が好きだわ
限りなく不要な物は省く的な
239デフォルトの名無しさん
2017/11/15(水) 07:22:37.14ID:1MOdQV57
インデントルールにたまにハマるくらいかな
一応ブレース&セミコロン方式でも書けるようだが
240デフォルトの名無しさん
2017/11/15(水) 12:36:08.57ID:Lu+q1695
合成関数を左から右に書きたい
何か数学でそんな書き方もあったと思うんだけど忘れた
241デフォルトの名無しさん
2017/11/15(水) 17:52:48.58ID:C1PNunQ6
Control.Arrow の (>>>) 演算子使えばいい
($) の引数入れ替えたヴァージョンなら Data.Function の (&) 演算子
242デフォルトの名無しさん
2017/11/15(水) 17:55:11.80ID:C1PNunQ6
>>239
>一応ブレース&セミコロン方式でも書けるようだが

標準的なコーディングスタイルだと使わないからなあ……
コード生成のときなんかには便利だけど
243デフォルトの名無しさん
2017/11/15(水) 21:31:38.92ID:ouxrorYh
Preludeに引数を入れ替えるというだけの関数なかったっけ?
マニアック過ぎて忘れてしまった
244デフォルトの名無しさん
2017/11/15(水) 22:05:39.40ID:C1PNunQ6
つ flip

全然マニアックじゃないよ……
245デフォルトの名無しさん
2017/11/16(木) 19:05:18.93ID:U25znXQF
Haskellが競プロで得意なグラフ問題がatcoderでマラソン形式で出題されているらしい
246デフォルトの名無しさん
2017/11/16(木) 20:02:11.38ID:fiTPZdVA
誰もhaskell使ってないでしょ
247デフォルトの名無しさん
2017/11/16(木) 20:10:09.25ID:sSGm4ReW
使うものじゃないからな。
248デフォルトの名無しさん
2017/11/16(木) 20:21:11.26ID:F5ZZYHwp
競プロでHaskell使ってた人は皆Rustに移ったイメージ
249デフォルトの名無しさん
2017/11/16(木) 20:28:57.17ID:BHFP68Bt
競プロは普通に手続き型かつ破壊的の方がいいもんな
入力範囲も固定だし、Haskellで挑む理由がない
250デフォルトの名無しさん
2017/11/16(木) 21:32:29.59ID:F5ZZYHwp
関数型っぽく書くと実装が一瞬で完了する簡単な問題が結構あったりはする
251デフォルトの名無しさん
2017/11/16(木) 21:43:12.74ID:wcx5gPy1
競プロより Project Euler で付けた力の方が将来の糧になりそう
252デフォルトの名無しさん
2017/11/16(木) 22:35:40.89ID:1hTLcaK1
Haskellはアルゴリズムをうまくfold系で書ければ
融合則とかで綺麗さと速度を両立できる感じになるけど
うまく書けないとSTRefとか使うことになって
なぜHaskellやってるんだって気分になる
253デフォルトの名無しさん
2017/11/17(金) 00:37:00.18ID:ehxZncBr
ストリーム処理的にしか使ってない
254デフォルトの名無しさん
2017/11/17(金) 00:38:56.41ID:ehxZncBr
ストリーム処理的にしか使ってない
https://ideone.com/kYgQxV
255デフォルトの名無しさん
2017/11/17(金) 11:21:31.36ID:7fJDQyWy
>>252
fold系には合わない計算があるのは分かる。

でも、なぜそれでSTRefを使うことになるのかが分からない。
256デフォルトの名無しさん
2017/11/17(金) 12:39:19.61ID:edPG1sGH
別にIORefやSTRefを使ったっていいじゃない
FFIだってポインターだってあるじゃない
ただしStateモナド、テメーはダメだ
257デフォルトの名無しさん
2017/11/17(金) 16:36:27.24ID:FedOcmK4
よく知らないけど
カーソル的なクラスと同じように使えるんじゃない?Stateって
Stateモナドに入るのがインスタンス生成で>>=がメソッドコール
258デフォルトの名無しさん
2017/11/17(金) 17:56:56.51ID:oGefn9Ej
1 s -> (a, s)
2 s -> (a -> s -> s) -> s
3 (a -> s -> s) -> s -> s
4 (a -> s -> s) -> s -> [a] -> s

1がStateで4がfoldr
259デフォルトの名無しさん
2017/11/17(金) 20:49:15.19ID:M/sHB851
Haskellって他人のコード読むと

▲ a b = □ . ○ $ map ■ $ (△ a) $ ▼ $ ◎ b []
 where
  ◎ b xs = 〜長い処理〜

こんなんばかりで脳がパンクするんだが
260デフォルトの名無しさん
2017/11/17(金) 20:52:24.67ID:FaJpeIXU
むしろ他人のコードでも割とサクサク読めるのがHaskellのメリットじゃね?
261デフォルトの名無しさん
2017/11/17(金) 22:00:31.45ID:Tih5fc0e
>>259
せっかく参照透過性が保たれているのだから、自分が読みやすいように、
でも式の意味は変えないように変形すればいい。

複雑なコードに出会って、それでも理解したいという欲求があるのなら、
取りあえず脳がパンクしない程度の小片にまで分解してみればいいんじゃないか。
262デフォルトの名無しさん
2017/11/17(金) 23:01:40.13ID:5gG4LJO3
なるほど処理を理解しきっていなくても
他人のコードを自分が読みやすく変形出来るのが参照透過性のメリットなのね。
その発想はなかったから今度から試してみる。
263デフォルトの名無しさん
2017/11/18(土) 00:48:05.98ID:Na4dLuAE
>>255
foldに乗らない処理ってのが
要は愚直に再帰で書いてるループ計算で、
破壊的更新をしないとものすごいGCが走ってつらいということがあった
(データ構造にもっと工夫の余地があったとは思う)
264デフォルトの名無しさん
2017/11/18(土) 02:53:34.88ID:/UaXWK/X
実際再帰って最終手段だよね。
入門者向けには基本みたいに言われている謎。
265デフォルトの名無しさん
2017/11/18(土) 08:54:42.51ID:6/fTmZe2
言うほど最終手段ではないし基本なのは事実
266デフォルトの名無しさん
2017/11/18(土) 12:58:42.16ID:TxAwv536
Haskellってループないんじゃなかったけ
再帰なしでどうやって組むんじゃ
267デフォルトの名無しさん
2017/11/18(土) 13:13:54.77ID:qwbMNygr
>>266
リストで言うならmapとかfoldlあたりで対応できるならそれを使えばいい
ユーザー定義の再帰関数は自由度は高いけど終了条件を見落とす可能性もあるし、場合によっては末尾再帰やら正格評価やらも気にせんといかん
必要としている仕事より強く自由度が高い関数や型をあまり使わない方がいいのは他言語と同じ
268デフォルトの名無しさん
2017/11/18(土) 13:17:08.17ID:6/fTmZe2
直近で書いた120行程度で関数定義25個を含んだコードを見返したが、確かに再帰は一箇所もなかった。
269デフォルトの名無しさん
2017/11/18(土) 13:21:49.25ID:IKdiOjx3
要するに集合演算があるから繰り返す必要がないということか
270デフォルトの名無しさん
2017/11/18(土) 13:59:18.87ID:5lmMR8NZ
再帰はいいんだけど関数定義をトップレベルに並べるとまるでgotoのように見える
しかしletは使うな、caseは使うなという人もいるから
消去法で高階関数かな
271デフォルトの名無しさん
2017/11/18(土) 17:01:09.59ID:Sb0VMRtj
再帰と言えば、今 haskell.org のサイトのトップにある prime の定義って素敵だよね。
こういう宣言的で自己説明的なプログラムが普段のコードでも書けるように精進したい。
272デフォルトの名無しさん
2017/11/18(土) 19:18:50.08ID:+f9/gyau
以下で、なぜエラーが出るのかがわからないです。

import Data.Typeable

f :: (Show a, Typeable a) => a -> String
f a = if typeOf a == typeRep (Proxy :: Proxy String) then a else show a

以下のようにすると、なぜかうまくいきます。

f a = if typeOf a == typeRep (Proxy :: Proxy String) then read $ show a else show a
273デフォルトの名無しさん
2017/11/18(土) 20:12:39.81ID:Sb0VMRtj
>>272
前者で then a else show a としているから、a は String 型でしかありえない。
一方、型シグネチャにより、a は String 型以外の型も認めている。
矛盾している。

試しに前者を、型シグネチャを書かずに関数定義だけ書いて、ghci の :t で型を調べてみよう。


次回から、エラーの内容も書こう。
274デフォルトの名無しさん
2017/11/19(日) 00:17:21.62ID:K9yRHYlu
そこにエラーを出してくれるのがHaskellの良い所
動かす前に叱ってくれるって素晴らしい
275デフォルトの名無しさん
2017/11/19(日) 07:14:38.53ID:gzKE6jPG
>>273
ありがとうございます
276デフォルトの名無しさん
2017/11/19(日) 14:34:38.43ID:Sx00JERW
>>271
数学的な定義をそのまま書いて動くっていうのは確かにかっこいいところ
その代わりあの定義では正しい篩になってなくて割と遅かったはず
277デフォルトの名無しさん
2017/11/19(日) 17:33:53.76ID:FtsW9SXJ
ちゃんと書くとこんな感じになる

primes = 2:(section [3..] composites)
 where
  composites = union [multiples p |p<-primes]
  multiples n = map (n*) [n..]

section (x:xs) (y:ys)
 | x < y = x : (section xs (y:ys))
 | x == y = section xs ys
 | x > y = section (x:xs) ys

union = foldr merge []
 where
  merge (x:xs) ys = x:merge' xs ys
  merge' (x:xs) (y:ys)
   | x < y = x : merge' xs (y:ys)
   | x == y = x : merge' xs ys
   | x > y = y : merge' (x:xs) ys
278デフォルトの名無しさん
2017/11/19(日) 20:38:10.15ID:21tWIVgE
>>277
かっこいいコードだけど
省ける計算が多い分まだ試し割の方が速いんだな
primes = 2 : filter isPrime [3..]
isPrime x = all ((/=0) . (x`mod`)) $ takeWhile ((<=x) . (^2)) primes
数が大きくなればmodのコストが問題になるのかもしれないけど
279デフォルトの名無しさん
2017/11/19(日) 20:53:42.98ID:CsMCJwUW
>>278
かっこいいの? どの辺りが魅力的なん?
280デフォルトの名無しさん
2017/11/19(日) 20:54:52.08ID:FtsW9SXJ
一応言っとくと >>277 はRichard Bird がよくあるヴァージョンを批判されてきちんと篩を書いたコード
281デフォルトの名無しさん
2017/11/19(日) 21:08:29.23ID:21tWIVgE
>>279
modを使わない所がお洒落
282デフォルトの名無しさん
2017/11/19(日) 21:13:45.49ID:aWoSpo3i
でも解りにくいじゃん!
Haskell知らなくても何をしてるか
勝手に分かってしまうコードが宣伝用には理想

そういう視点でも
メモ化フィボナッチコードは神コードだね
283デフォルトの名無しさん
2017/11/19(日) 22:01:10.75ID:3wAGigTa
フィボナッチってどこで使う場面があるのさ?競プロ?
284デフォルトの名無しさん
2017/11/19(日) 22:04:47.47ID:CsMCJwUW
>>282
それは >>276 が「その代わり」ってちゃんと断ってるじゃん。
たいていの場合、両立なんてできないんだよ。

メモ化フィボナッチが希有な例なんだよ。


>>283
全くない。
だから、学ぶべきはフィボナッチ数列の作り方じゃなく、
宣言性を壊さないままメモ化する技術の方なんだが、
あの本にはその辺りのことは書かれていなかったような気がする。
メモ化フィボナッチは単なる例にとどまってたんじゃなかったか。
285デフォルトの名無しさん
2017/11/19(日) 22:31:12.52ID:FtsW9SXJ
「あの本」?
286デフォルトの名無しさん
2017/11/20(月) 09:32:22.51ID:2YC1SjJx
f1 = (map f1' [0..] !!)
 where
  f1' 0 = a
  f1' n =〜
の形は

f2 n = foldl' f2' a [1..n]
 where
  f2' n =〜

より分かりやすい。
import Data.List (foldl')という
余計なインポートが不要なのが最高。
287デフォルトの名無しさん
2017/11/20(月) 10:30:22.80ID:ybEAOaLd
ghcコマンドやghciコマンドの出力メッセージの中で、
引用符が倍角文字になってるんだけど、これ半角に設定できないかな。

ターミナルで使ってるフォントの関係でかなり読みにくい。
288デフォルトの名無しさん
2017/11/20(月) 19:19:15.77ID:i6dwbdTS
わかりやすいもなにも map で畳み込み計算をどうやって書くつもりなんだろ
できなくはないけど余再帰使うはずで、そうなればもう map とかそういう問題ではない

というかscanlをmapで再実装するのがそんな最高なのかしら……
289デフォルトの名無しさん
2017/11/20(月) 23:56:42.78ID:POIf14n/
foo (x:xs) = 〜(なんか関数)〜 (x:xs)

foo a@(x:xs) = 〜(なんか関数)〜 a

したとき、前者と後者は内部的に処理違ったりする?
290デフォルトの名無しさん
2017/11/21(火) 08:36:28.75ID:jCVIG8Yh
>>289
GHCの処理方法が分からないなかで、
それでも違うかどうかを調べるには、たとえば次の方法がある。

・Coreを比較する
・プロファイルを比較する
・バイナリを比較する
291デフォルトの名無しさん
2017/11/21(火) 11:49:36.85ID:Zx2Txvw4
>>288
普通ならリストが空か否かの場合分けで2行ぐらい書くところを
余再帰なら1行で書けるんだろ
292デフォルトの名無しさん
2017/11/21(火) 14:03:16.67
>>224
C++ちゃんとできる


(ガサガサッ

(ビュンッ!
293デフォルトの名無しさん
2017/11/21(火) 17:45:32.32ID:Ftr24wOW
C++ちゃんってあれだろ?
「ブーストかけるぜ」なCちゃんの別人格

Haskellちゃんも見たかったなぁ…
294デフォルトの名無しさん
2017/11/21(火) 19:32:07.35ID:Egb8Rv0R
>>289
ghci -ddump-simpl で起動して、問題の関数定義を let 束縛してみたら
Coreのレベルで完全に同じだとわかる

まあ、そりゃそうだろって感じだが
295デフォルトの名無しさん
2017/11/21(火) 20:06:56.72ID:NQH8f0G2
バイナリでは違いが出たよ
296デフォルトの名無しさん
2017/11/22(水) 00:50:08.76ID:ovFpIkAx
コンパイル時刻
297デフォルトの名無しさん
2017/11/22(水) 09:20:37.07ID:CArcd2ol
f (x:xs) = (x:xs) → case 引数 of _ -> x : xs
g a@(x:xs) = a →
だと
298デフォルトの名無しさん
2017/11/22(水) 09:28:04.15ID:CArcd2ol
ミスった
ghci -ddump-simplだと
f (x:xs) = (x:xs) → case 引数 of _ { (x:xs) -> x:xs }
g a@(x:xs) = a → case 引数 of a { (x:xs) -> a }
みたいなのが出力されたけど・・・
299デフォルトの名無しさん
2017/11/22(水) 10:01:50.65ID:KMROYMtU
やってみた

https://ideone.com/6r6LpA

@パターンは不可反駁なんで、少しだけ違うね
9行目と31行目で a は不可反駁なんでワイルド扱い
15行目と37行目もまさに同じ点が違う
300デフォルトの名無しさん
2017/11/22(水) 10:27:32.10ID:DL3EaaUj
stackoverflowで聞けば識者が的確に答えてくれそう
301デフォルトの名無しさん
2017/11/22(水) 18:10:15.64ID:ovFpIkAx
最適化で消えるだろう
302デフォルトの名無しさん
2017/11/23(木) 04:31:10.10
《問》(配点 10点)
\n -> 1 + n
\f n -> f 1 n
\f -> f 1 . (\g n -> g 2 n)

らはスーパーコンビネータである。しかし、

\f g -> f 1 . (\n -> g 2 n)

はスーパーコンビネータではない。何故か?

《ぼくの解答》
g がラムダ抽象のスコープ外で束縛されており、そのスコープにおいて自由変数である。
従ってこのラムダ抽象は閉じた項ではないのでコンビネータではない。
コンビネータでも定数でもないのでこのラムダ抽象はスーパーコンビネータではない。
全体としては、定数でなく、されどコンビネータではあるが、その内部にスーパーコンビネータでないものを含んでいるのでスーパーコンビネータではない。



何点貰えますか?
303デフォルトの名無しさん
2017/11/23(木) 04:34:25.61
訂正(一行目)
× g がラムダ抽象の〜
○ g が括弧内のラムダ抽象の〜
304デフォルトの名無しさん
2017/11/23(木) 06:11:27.29ID:S1VTy0fD
(->) は?
305デフォルトの名無しさん
2017/11/23(木) 09:12:04.55ID:GxHnNEoE
>>302

¥n1 n2 … -> E

がスーパーコンビネータであるのは

(1)Eに出現する自由変数が n1〜n2 だけであって、かつ、
(2)Eに現れるラムダ抽象がスーパーコンビネータであるとき、

そしてそのときに限る。

¥f g -> f 1 . (¥n -> g 2 n)

の場合、 ¥n -> g 2 n は g が(1)を満たさないのでスーパーコンビネータではなく、
したがって(2)によって、それを含む全体がスーパーコンビネータではないこよになる。

スーパーコンビネータの定義ないし必要十分条件を示してないと減点するのが普通。
306デフォルトの名無しさん
2017/11/23(木) 09:13:02.72ID:GxHnNEoE
表記ちょっとミスったけどまあ分かるでしょ
307デフォルトの名無しさん
2017/11/23(木) 09:16:33.82ID:GxHnNEoE
ああ……

(2)Eに現れる「すべての」ラムダ抽象がスーパーコンビネータであるとき、

だ。肝腎のとこが抜けてる……寝よう……
308デフォルトの名無しさん
2017/11/25(土) 23:17:22.88
>>305
Haskell High Performance Programming には、
A supercombinator is either a constant, say 1.5 or ['a'..'z'], or a combinator whose subexpressions are supercombinators.
と説明されてますが、これは嘘なのですか?
309デフォルトの名無しさん
2017/11/26(日) 00:11:02.93ID:6YUjT6hC
>>308
それだと

¥x y -> (x + y)

ですらsupercombinatorにならんよ
310デフォルトの名無しさん
2017/11/26(日) 01:59:13.32
むむむ…
(x+y)に現れる全てのラムダ抽象とはなんですか?
311デフォルトの名無しさん
2017/11/26(日) 07:38:30.34ID:6YUjT6hC
>>310
この場合、(x+y)にはラムダ抽象が現れていないので条件(2)は空虚に充足されている
あとは条件(1)も充足されてるから、スーパーコンビネータになる
312デフォルトの名無しさん
2017/11/26(日) 12:17:18.61ID:qOXUNg+f
>>308
subexpressionの定義が曖昧だな
例えば \ y -> x は \ x y -> x のsubexpressionか?
313デフォルトの名無しさん
2017/11/26(日) 13:55:44.55ID:VpgSp9ND
純粋関数型どころか関数型言語のTDD本が無いのですが、
Java用に書かれた本に載っている方法論のどは、
Haskell で TDD を行う際にも取り入れられる事は多いですか?

例えば最近出た「テスト駆動開発」(Kent Beck著)など。
最初の方をチラ読みしたところ、大変読みやい印象を受けたので、
参考になればいいなと思いましたが、どうでしょうか。
314デフォルトの名無しさん
2017/11/26(日) 23:25:24.41ID:k9PNaQXG
次の型があるとします。

data T = D1 {d1a :: Int, d1b :: String} | D2 {d2a :: Char, d2b :: Double, d2c :: Integer}

同じデータコンストラクタ由来の値同士の比較関数を次のように作るとします。

smallerThan :: T -> T -> Bool
smallerThan t1@(D1 _ _) t2@(D1 _ _) = d1b t1 <= d1b t2
smallerThan t1@(D2 _ _ _) t2@(D2 _ _ _) = (d2b t1, d2c t1) <= (d2b t2, d2c t2)
smallerThan _ _ = undefined

これを、D1 や D2 の定義内のフィールドの順を変えたり、フィールドの数が変わったりしても、
smallerThan 関数の定義は修正しなくても良いようにしたいのですが、方法はあるでしょうか。
要するに、パターンマッチにおいてデータコンストラクタ名のみマッチングテストをしたいのですが・・・
315デフォルトの名無しさん
2017/11/27(月) 00:32:04.34ID:4PKE/tcf
>>314
言語拡張 PatternSynonyms,RecordWildCards を使うといけるようだよ。

pattern D1_ <- D1 {..}
pattern D2_ <- D2 {..}

として、後は t1@D1_ t2@D1_ のようにパターンマッチして利用する。
316デフォルトの名無しさん
2017/11/27(月) 00:44:20.26ID:ZVUfUGVW
ていうか、 拡張使わなくても空レコードでパターンマッチできたはず

smallerThan (D1{}) (D1{})

みたいに。
317デフォルトの名無しさん
2017/11/27(月) 00:51:37.87ID:ZVUfUGVW
ほれ
https://paiza.io/projects/EKoIGfBN48OP_bZZW2qlug
318デフォルトの名無しさん
2017/11/27(月) 07:38:07.20ID:ysH8mXge
なるほど、空レコードでマッチングできる事を知りませんでした。
ありがとうございました。
319デフォルトの名無しさん
2017/12/02(土) 10:21:44.75ID:SLnkjfbB
ある名前の型がどのモジュールで定義されているのか、
あるいはまだ定義されていないのかを hoogle で調べる事は出来るでしょうか?
320デフォルトの名無しさん
2017/12/02(土) 10:53:38.35ID:pAxOhb0h
実際に hoogle つかってみりゃいいじゃないか
321デフォルトの名無しさん
2017/12/02(土) 12:27:16.11ID:SLnkjfbB
>>320
すみません、かなり恥ずかしい勘違いをしていました。
できました。
322デフォルトの名無しさん
2017/12/06(水) 00:26:39.18ID:4CiAHXyH
tanakhにはもっとhaskellの話をしてほしいよ
323デフォルトの名無しさん
2017/12/06(水) 00:47:59.63ID:IlK1069D
haskellよりrust
324デフォルトの名無しさん
2017/12/06(水) 05:28:21.98
tanakhには今だけはPEZYの話聞きたい
325デフォルトの名無しさん
2017/12/07(木) 18:59:33.65ID:HvbKuO/f
GHCで、モナドの各インスタンスの(>>=)関数などの、型ではなく実装を見たい場合はどこを見ればいいのでしょうか
特にIOモナドが気になってます
326デフォルトの名無しさん
2017/12/07(木) 20:09:35.72ID:RO0W0ydd
https://hackage.haskell.org/package/base-4.10.1.0/docs/System-IO.html#t:IO

IO の instances の中から Monad IO 選んで各演算子の source 見ればいい。
327デフォルトの名無しさん
2017/12/07(木) 20:10:53.27ID:RO0W0ydd
https://hackage.haskell.org/package/base-4.10.1.0/docs/src/GHC.Base.html

要するにこれね。
328デフォルトの名無しさん
2017/12/07(木) 20:30:31.60ID:g7/WaViS
>>326
>>327
おお、ありがとうございます
重ね重ね申し訳ないのですが、これによるとIOモナドの(>>=)はbindIOでbindIOは
bindIO :: IO a -> (a -> IO b) -> IO b
bindIO (IO m) k = IO (\ s -> case m s of (# new_s, a #) -> unIO (k a) new_s)
となっているのですが、ここでcase式を使っているのはどういった意図があるのでしょうか
letと同じ使い方ですか?
329デフォルトの名無しさん
2017/12/08(金) 00:03:17.81ID:Xz8G+NtW
caseは先に式を評価してからパターンに含まれる変数を束縛する

でもletには再帰があるかもしれないから先に変数束縛する
その変数を含むかもしれない式は遅延評価する
330デフォルトの名無しさん
2017/12/08(金) 00:12:07.08ID:Hb+0BqaU
>>329
なるほど、そうだったんですね
勉強になりました、ありがとうございます
331デフォルトの名無しさん
2017/12/09(土) 22:36:37.66ID:rGCS9XaY
Stack の LTS 9.17 に repa って無いのな
332デフォルトの名無しさん
2017/12/10(日) 00:28:18.35ID:61nYDsc2
rapeならあるかも
333デフォルトの名無しさん
2017/12/13(水) 13:00:04.55ID:BNG1q+wP
stackでパッケージをインストールする時にコンパイルしなくなったって話を聞いたけど本当ですか?
バイナリをダウンロードしてインストールするみたいな?
化石スペックの俺のパソコンでshellcheckのインストールで8時間以上かかった悪夢は解消されるの?
334デフォルトの名無しさん
2017/12/13(水) 13:14:20.26ID:PKyEd910
【葬儀】たくさんの人があっけなく死んでいく
http://2chb.net/r/sousai/1511694073/l50
【応報】藤原さやか『放射脳は恥ずかしい』→急死w
http://2chb.net/r/csaloon/1511952872/l50
【内乱罪】フクイチで核ミサイルを製造していた疑惑
http://2chb.net/r/disaster/1511410332/l50
335デフォルトの名無しさん
2017/12/16(土) 19:22:25.34ID:6IhxD8vU
abc予想の解決で再び圏論が注目を浴びそうだ
336デフォルトの名無しさん
2017/12/16(土) 19:57:24.58ID:L7fV5ivU
Haskell->圏論って流れはあるけど
圏論やっててHaskellに興味を持つ人もいるのかな
337デフォルトの名無しさん
2017/12/16(土) 21:07:33.28
圏論が何に役立つのか知らんけど、苦労して学んだ人が振り上げた拳の行き場が見当たらなくて
たまたま目についたHaskellをぶん殴ったんじゃないの
それは道端の石ころを蹴っ飛ばすように
338デフォルトの名無しさん
2017/12/16(土) 21:27:51.46ID:eb/bER4l
数学は案外行き当たりばったりに問題が解決されている
圏論で判明した同型について、ある分野で解決されていて
ある分野においてすっぽ抜けているところがあれば、その問題は解決できるとみなせる
このように現状のとりとめのない数学を整理するために圏論はあると言えるかもしれない
よって圏論自身から新たに得られる情報はあまりないだろう
だからあまり研究も進まない・・・
339デフォルトの名無しさん
2017/12/16(土) 22:31:29.81ID:L7fV5ivU
Ekmettさんとかはどういうスタンスなんだろう
340デフォルトの名無しさん
2017/12/17(日) 08:25:26.21ID:Rl+JU+bv
圏論自体はものの見方とそのための記号だから、
圏論使ってる時点で、自分の応用分野もってるでしょう。
その場合、
圏論 -> universal algebra
圏論 -> functional programming
圏論 -> categorical stochastic relations
圏論 -> haskell
のように興味の対象が増える程度でhaskellだということに意味はなさそう。
圏論的アプローチは他の言語でもライブラリ群いろいろあるしね。
341デフォルトの名無しさん
2017/12/19(火) 05:44:21.31ID:LTRWN5XC
プログラム・プロムナード/Haskellプログラミング-情報処理学会
http://www.ipsj.or.jp/magazine/promenade.html
342デフォルトの名無しさん
2017/12/19(火) 13:25:55.10ID:fHF/6Dd9
bakeの開発が終了したようですが、
同じ趣旨のライブラリは他にありますか?
343デフォルトの名無しさん
2017/12/19(火) 23:53:10.07ID:IjOdIEt7
この会社って言うたらそこまでの規模じゃないだろうし実態もよく分かってない感じなのに
なんつーか、『ある傾向の人間性』の社員が現時点ですら目立ち過ぎだろ…


こぃぬ㌠‏ @Altalinux
スパコンに詳しくない人間がスパコンを語って
つい昨日PEZYを知ったような人間が補助金やら助成金やらを語るんですねえ地獄のような構図ですねえ

Hideyuki Tanaka‏ @tanakh
まじで特捜は「詳しい技術者」が「使い物にならないスパコン」に「巨額の資金」が流れてるというタレコミだけで、
オッそれは絶対におかしいなとか先走ったけど、調べても思ったようなのが出てこなくて困ってるんじゃないのか。

山田てるみ‏ @telmin_orca
つまりこの件は、アベガーとかカネノナガレガーとか言っておけば良いのであって、
技術的にどうとか言った瞬間に全力で殴られる案件だということだ

Hishinuma‏ @Hishinuma_t
例のPEZYが100億円不正受給の記事が何の謝罪もなく差し変わっている。

http://www.data-max.co.jp/291219_dm1545_2/
344デフォルトの名無しさん
2017/12/20(水) 00:50:37.50ID:L78Bpqe7
まずはお前が騙し取った金返して謝罪しろよ
345デフォルトの名無しさん
2017/12/20(水) 18:40:30.98ID:Qm3pwgEV
tanakhさんはhaskellの日本での普及に貢献された方かもしれませんが
tanakhさんが勤める会社PEZY computingはhaskellとは関係ないのでは
346デフォルトの名無しさん
2017/12/20(水) 20:26:50.59
二位じゃダメなんですか陣営に失脚させられたかな
347デフォルトの名無しさん
2017/12/20(水) 20:29:03.05ID:WuO+qrMG
初心者なのでtanakhさんって方を知らないのですがどんな方なんですか?
348デフォルトの名無しさん
2017/12/21(木) 00:28:08.74ID:vVg09BnX
tanakhさんは『すごい Haskell たのしく学ぼう!』の翻訳者の1人の田中英行さんのハンドルネームだよ https://twitter.com/tanakh
ちなみにもう1人の翻訳者の村主崇行さんは今年亡くなられた http://www.asj.or.jp/tennet/archives/msg07622.html
349デフォルトの名無しさん
2017/12/21(木) 00:42:32.53ID:X50/c3iq
tanakhは簡単に言うとプログラミングが得意な屑
350デフォルトの名無しさん
2017/12/21(木) 00:46:16.46ID:53ydh+Pj
>>348
今すごいHaskellの訳者紹介見直したら村主さんのコメントがめっちゃ真面目で泣きそう
大損失だな……
351デフォルトの名無しさん
2017/12/21(木) 03:19:48.25
それでは本日の出場者を紹介してまいります。
先ずは田中英行。

tanakhでお馴染みのアカウント名は、大学時代、フルネームだかtanakahだかの取得に、被ったか弾かれたかで妥協してつけたのがその由来です。
高校の時にファミコンだかスーファミだかのエミュレーションソフトをネットワーク対戦可能な機能をつけて開発した(当時ネットワーク対戦機能を持つエミュは世界初)人で
この時学んだだろう、ファミコンの処理の仕様には一家言あり。
京都大学工学部(後期日程で合格)卒、東大院卒
競技プログラミングでは全盛期にTopCoderにてレッドコーダーまで登ったことがあり、
大学時代に大学対抗競技プログラミングの世界大会へ国内代表権を勝ち取って出場歴あり、
その頃知り合ったエリート達と Preferred Infrastructure(PFI) を創業。
後に体調不良で休職しPFIを辞めた後、Haskellで株式を取り扱うソフトウェアを開発するベンチャー(?)に就職も半年強でまた転職。その転職先がPEZY Computingであります。

Twitterではふざけてばかりおりますが、あれは頭のいい人特有の余裕みたいなもので
本当の彼は日夜PEZYのスパコンで最高のパフォーマンスを叩き出して世界ランキングを塗り替えるべく
ループ毎に20ナノ秒を削るカリカリチューニングコードを書き続けている本物のプログラマです
社長の詐欺疑惑の件で社内の様子が新聞に載った際、『5000兆FLOPS欲しい!』のパロネタを壁に掲示していたのも彼の仕業であります

すごいHaskell楽しく学ぼうの翻訳者の一人

夢はこの世からプログラマ(という職を自動化技術によって)消し去ること

猫が大好き。Haskellマスター 田中英行──
352デフォルトの名無しさん
2017/12/21(木) 03:46:15.12ID:tLGR8mGR
つよい
353デフォルトの名無しさん
2017/12/21(木) 04:49:39.43ID:UMfwMR6Z
京大首席合格(後期)
354デフォルトの名無しさん
2017/12/21(木) 06:35:36.91ID:xu21FK50
プログラミングに関係ないプログラマの話は余所でやってほしい
355デフォルトの名無しさん
2017/12/21(木) 11:23:12.31ID:hPrP3Uhu
諸君、議論したまえ
356デフォルトの名無しさん
2017/12/21(木) 12:28:48.94ID:RWEMpEAi
競プロに出てくるような座標がコロコロ動いたり表を作るような問題をHaskellで上手く解くにはどうしたらいいでしょうか
手続き型では二次元配列を更新しまくればいいのですが
さすがに毎回takeとdropでリストを作り直すのは悪手ですよね?
357デフォルトの名無しさん
2017/12/21(木) 12:52:34.50ID:xNbVMOX5
悪手かどうかはコンパイラに聞いてみればいいんだろ
配列を更新しまくったらコンパイルエラーになるのか?
コンパイラが信用できないならLispとかErlangとかを使えばいい
358デフォルトの名無しさん
2017/12/21(木) 12:55:55.14ID:tLGR8mGR
関数型っぽく解決するにはどうすればいいかを聞いてるのでは
359デフォルトの名無しさん
2017/12/21(木) 12:59:59.71ID:Pje/kUoS
競プロは時間・空間計算量にシビアだから
360デフォルトの名無しさん
2017/12/21(木) 13:17:02.58ID:xNbVMOX5
競技プログラミングと関数型プログラミングの両立を目指すのは良いと思うよ
ついでに手続き型と関数型も両立すればもっと良い
361デフォルトの名無しさん
2017/12/21(木) 14:20:53.11ID:V2XnJ2N1
C++でギリギリな問題でもない限りMapとかでもいけるけど
Mapで書きやすいかというとそうでもない
362デフォルトの名無しさん
2017/12/21(木) 15:30:56.14ID:wep0AD/i
>>356
具体的な例を挙げてくれないか?
363デフォルトの名無しさん
2017/12/21(木) 16:35:55.75ID:X50/c3iq
少なくとも報道をソースとするなら、斎藤社長は「詐欺を働いた」に等しいのよ。
平たく言うと「自分の意思で嘘をついた」と言い換えてもいい。

それを、「開発の失敗」だの「誤りやミス」だのと一緒にしようとする
ぺジー連中が馬鹿だと言ってるのよ。

失敗やミスによるものと、虚偽によるものでは明らかに
社会や法のあつかいが異なる、そんなことも知らないのか、
知ってて敢えて誤魔化そうとしてんのかよぺジーのスパコン馬鹿は、って話。
364デフォルトの名無しさん
2017/12/21(木) 18:27:40.50ID:dmM+x8ix
>>363
Haskellと関係ない話だろ
>>354を読めない人か
365デフォルトの名無しさん
2017/12/21(木) 18:36:28.75ID:MPWX0Jf6
釣られるな
366デフォルトの名無しさん
2017/12/21(木) 19:45:14.05ID:N1FJ2XDr
お前はスレチの馬鹿
367デフォルトの名無しさん
2017/12/21(木) 20:21:25.77ID:6NVAqFid
最近毛の壁みないな
368 ◆QZaw55cn4c
2017/12/22(金) 06:04:00.73ID:Zf+4IlSz
>>367
あの情熱はぜひとも獲得したいと思っているのですが…
369デフォルトの名無しさん
2017/12/22(金) 12:35:38.59ID:xKTA0owB
情熱だけで正しい知識が伴ってないとダメ
370デフォルトの名無しさん
2017/12/22(金) 12:46:49.98ID:PrEChj7V
f = reverse . reverse

main = print $ f [1..10]

みたいに書いたときって、reverse関数が2回実行されますか?
結果が変わらないからされないですか?
371デフォルトの名無しさん
2017/12/22(金) 13:27:52.08ID:xKTA0owB
そのままではされてしまいます。しかしメタプログラミングを用いて reverse . reverse を 静的に除去可能です
372デフォルトの名無しさん
2017/12/22(金) 13:46:49.38ID:pcrnJTeB
そういう除去って、reverseは逆順だっていう知識をアプリオリに与えておくの?
それとも定義から解析して無意味じゃんって判断できるの?
373デフォルトの名無しさん
2017/12/22(金) 15:11:53.84ID:cEn+RgaZ
RULES プラグマです。
374デフォルトの名無しさん
2017/12/22(金) 16:02:02.05ID:pcrnJTeB
りょ。
サンクス
375デフォルトの名無しさん
2017/12/22(金) 16:36:48.40ID:GFPkoNql
>>371
ありがとうございます
さすがに出来ないだろと思ってたんですが方法はあるのですね
プラグマはまだ明るくないのでもっと勉強します
376デフォルトの名無しさん
2017/12/22(金) 19:53:35.68ID:6Ry8x8A0
foldl f a . reverse → foldr (flip f) a
みたいなルールはあってもいいかもね
reverse = foldl (flip (:)) [] だから
reverse . reverse == foldr (:) [] == id
後者の変換はghc標準でflipは簡約で消えると思う
377デフォルトの名無しさん
2017/12/23(土) 14:41:19.28ID:9K72DzOx
pezyは嘘ついて補助金だまし取って、一部を私的に流用したから逮捕されたのに、
まるで開発が計画通り進まなかったから逮捕されたかのように
印象操作しているから悪質
378デフォルトの名無しさん
2017/12/23(土) 15:19:44.84ID:97OmZxF2
べつに誰も何も言ってないだろ
おまいがそう解釈しただけでは
379デフォルトの名無しさん
2017/12/23(土) 15:21:59.98ID:Jhot/ru+
Haskellと関係ない話なんだよな
380デフォルトの名無しさん
2017/12/23(土) 16:45:07.96ID:UP/Zv3hx
Haskell で開発されたアプリケーションのソースで、こういう形のものがある。

---[ Main.hs ]---
module Main where
import Application (runApp)

main :: IO ()
main = runApp

---[ Application.hs ]---
module Application (runApp) where

runApp :: IO ()
runApp = do
 ほりゃらら

つまり、Main モジュールにはできるだけ何も書かず、別のモジュールに仕事を移譲している。
中には runApp 関数を一つ持つ Application クラスと、そのインスタンス型が一つだけ定義されている事もある。

このような実装の runApp 関数が実際に担っているロールはどれもアプリのエントリポイントだ。
しかし、これはまさに main 関数のロールではないだろうか。
main 関数が本来担う仕事を他の関数に丸投げする事にどのような意味やメリットがあるのだろうか。
381デフォルトの名無しさん
2017/12/23(土) 17:10:50.49ID:E55wgL+K
PEZYのスレ立ててそっちでやってください
382デフォルトの名無しさん
2017/12/23(土) 17:47:20.71ID:RG/9qhez
>>380
runAppとは別の処理をrunAppの前後に入れるときにmainに書き足すだけで楽とかじゃね?
383デフォルトの名無しさん
2017/12/23(土) 19:57:22.35ID:deN0FCLD
おれはmainに直接書くわ。Haskell以外でもそうしてる。
384デフォルトの名無しさん
2017/12/23(土) 20:06:53.43ID:ZaJB/ccT
stackで新規プロジェクト作成するとmainからsomeFuncに飛んでるよね
385デフォルトの名無しさん
2017/12/23(土) 20:30:46.09
そう…(無関心)
386デフォルトの名無しさん
2017/12/23(土) 22:07:15.33ID:ePD34LgC
Advent Calendar催促おばさんが面白い
387デフォルトの名無しさん
2017/12/23(土) 23:15:34.86ID:nlPzuvyg
>>380
runAppの処理を別のモジュールやアプリに組み込みたいとき、名前がmainだと困る、とか
388デフォルトの名無しさん
2017/12/23(土) 23:54:48.18ID:UP/Zv3hx
>>382
楽かどうかという視点ならば、前後に入れるだけなら、
その手間は runApp 関数の中に入れるのと同程度ではないか?

別の処理だからという視点ならば、確かに一見理にかなっていそうたが、
アプリが立ち上がった直後、エントリポイントのロールよりも前に仕事をするものとは、
いったいどのようなロールなのだろう?
私が見てきたアプリでは、runApp 関数の中でコマンドライン解析や設定ファイルの読み込み、
ログシステムの構築なども行っていた。
要するにアプリを動かす準備だ。
準備をする前にすべき事とは?


>>387
runApp 関数内にそのアプリ専用のエントリポイントが書かれたものしか見たことがなく、
それを別のモジュールやアプリに組み込むという状況が想像できないのだが、
具体的にどういう事なのだろう?
その場合、関数名が main だとなぜ困るのだろう?
389デフォルトの名無しさん
2017/12/24(日) 02:26:59.79ID:0qLezeKt
>>378
社員が総出でtwitterで開発が上手くいかなかったから詐欺にされたって
デマ流しまくっているじゃん
390デフォルトの名無しさん
2017/12/24(日) 07:27:03.02
最近毛の壁みないな
391デフォルトの名無しさん
2017/12/24(日) 13:10:48.98ID:L0WbVZsM
壁毛ならマ板にスレあるよ
392デフォルトの名無しさん
2017/12/25(月) 01:09:51.28ID:KmZOPanU
pythonにはxonshとかいうシェル言語があるらしい
http://vaaaaaanquish.hatenablog.com/entry/2017/11/30/175236
これのHaskellバージョンがあれば便利じゃないか。
Haskellとの親和性は高いと思う。シェルスクリプトって要はコマンドのコンビネータだし、コマンド呼び出しの構文は関数適用によく似てる。
393デフォルトの名無しさん
2017/12/25(月) 01:12:38.31ID:KmZOPanU
ただ、ls -a -l -d hoobar みたいなのをシームレスに書くのはチャレンジングな課題だ。
引数の文字列リテラルのリストなどをコマンドラインにイチイチ打ち込むのは面倒くさい。
RebindableSyntaxでマイナスを定義し直して、、いや、悪手っぽいか。
なるべくHaskellを書いていきたい。いちばん身近なところを置き換えられたなら、とても良い。
394デフォルトの名無しさん
2017/12/25(月) 05:14:44.74ID:/fea/C1E
haskellバージョンのイメージわかないけど
haskellシェルは何がどう便利になるというの?
395デフォルトの名無しさん
2017/12/25(月) 12:02:29.99ID:EPafu7oO
pythonの真似だから便利さもpythonと同じになる計画なんだろ
同じにならなかったら、計画通りに行動しなかった奴が戦犯で、計画立てた奴は無罪
396デフォルトの名無しさん
2017/12/25(月) 12:28:50.13ID:F9gRwc9o
Haskellシェルだとhsshとかになるん?
397デフォルトの名無しさん
2017/12/26(火) 01:06:43.66ID:ntWKYT9z
シェルスクリプトを使えばいいと思う
なぜコマンドの実行にHaskellを使う必要があるのか
398デフォルトの名無しさん
2017/12/26(火) 11:29:24.52ID:zQBvuC0m
まあconfigureスクリプトにはm4とかいうプリプロセッサがあるから意外と難しいよな
399デフォルトの名無しさん
2017/12/29(金) 04:23:00.56ID:PWPZaOro
EzoeがいつHaskellに飽きて堂々とディスり始めるのか楽しみ
400デフォルトの名無しさん
2017/12/29(金) 05:30:43.56ID:dUewwmlf
ガチC++erから見たHaskellというのに少し興味が湧いている
401デフォルトの名無しさん
2017/12/29(金) 05:56:52.00ID:xARFptR0
仕様壊れてるC++に慣らされきった人間にHaskellの厳格さの価値がわかるのかねぇ
静的型不要論的な妄言吐きそう
402デフォルトの名無しさん
2017/12/29(金) 13:11:23.08
江添っぽさがふんだんに盛り込まれていてよい
403デフォルトの名無しさん
2018/01/01(月) 12:12:22.18ID:bFOlOWpA
この人は本当にプログラム書けるのかと不安になることがあるよな。
はっきり言ってc++普及に関しては逆効果をあげてるとしか思えん。
404デフォルトの名無しさん
2018/01/01(月) 16:00:21.64ID:pGnY0Ifz
芸人だと思って見てるわ
405デフォルトの名無しさん
2018/01/01(月) 16:42:32.16ID:O/UW/N2W
老害の見本
406デフォルトの名無しさん
2018/01/01(月) 16:44:34.98ID:QrIEjumd
ローカルマシンにある jenkins において、haskell コードのビルドに stack を使いたいのですが、
その際に環境変数として HOME が設定されていないと使えません。

そこで、ビルド時に使うシェルスクリプト内で HOME を JENKINS_HOME に設定しましたが、
このディレクトリでは何か問題あるでしょうか。
取りあえずやってみましたら、今のところ特に問題なくビルドできていますが・・・

スレチでしたらすみません。
407デフォルトの名無しさん
2018/01/01(月) 18:03:12.68ID:TBixhmIP
>>406
jenkinsはわからないがstackはどうやら $HOME 直下に .stack ディレクトリを作って
そこに(必要なら)ghcとかをインストールするらしい。
例えばconfig.yamlもそこに入っているので、普段の$HOMEにそれがある場合は、jenkinsでのビルドと設定が変わってしまう。
とはいえ、このファイルが働くのは特定のプロジェクトに属さない動作のとき(stack newとか)だけっぽいので、
ディスクの容量が切迫してるとかでない限り、問題ないんじゃないかな。
408デフォルトの名無しさん
2018/01/02(火) 00:37:55.48ID:hQQ1WWOS
C#しか知らない大学生なんだが関数型を理解したいんだが何すれば
409デフォルトの名無しさん
2018/01/02(火) 01:13:22.41ID:wAfZ+SpV
H本を読む
410デフォルトの名無しさん
2018/01/02(火) 01:16:32.50ID:hQQ1WWOS
F#と比べてどれがいい?
411デフォルトの名無しさん
2018/01/02(火) 01:21:41.45ID:wAfZ+SpV
は?勉強目的なら言語名でググって検索件数が多いやつのほうが解決策見つけやすいだろHaskell一択だろぉ
412デフォルトの名無しさん
2018/01/02(火) 01:44:03.46ID:9JghhVFB
まずHの練習からしたほうがいい
413デフォルトの名無しさん
2018/01/02(火) 01:59:58.11ID:hQQ1WWOS
>>411
そうなんですか
414デフォルトの名無しさん
2018/01/02(火) 02:11:04.88ID:bfdSjs8c
F#もいいけどまずはHaskellの純粋さに感動してからの方が良いよ
415デフォルトの名無しさん
2018/01/02(火) 08:11:19.29ID:hHAEZ1EB
言語仕様はもちろんとして純粋関数型のデータ構造やアルゴリズムも合わせて学習しないと手詰まりになる
416デフォルトの名無しさん
2018/01/02(火) 13:53:49.75ID:2m2cwFbr
状態マシンでなく関数合成に持ち込む為の定番手法,
例えばiteratee?とかの知識も知りたい。
417デフォルトの名無しさん
2018/01/03(水) 00:36:59.01ID:Mw/JDaoF
なぜ関数プログラミングは重要か
http://www.sampou.org/haskell/article/whyfp.html
418デフォルトの名無しさん
2018/01/03(水) 00:53:21.23ID:EBTl2OcL
関数型脳を鍛えるにはHaskellがよい
419デフォルトの名無しさん
2018/01/03(水) 01:24:32.28ID:wPBJzesv
プラグマとかシンタックスシュガーのオプションがやたらあって、
古い構文がデフォルトでなくなったり、いまだに安定してないイメージが強い
420デフォルトの名無しさん
2018/01/03(水) 03:21:56.48ID:Mw/JDaoF
安定してるプログラミング言語ってあんの?
421デフォルトの名無しさん
2018/01/03(水) 04:47:00.22ID:JH/i0Zss
拡張の数は標準の安定性と関係ないし非推奨になった構文も知る限り2,3個程度しかないし言うほど安定してなくはないと思うよ
主要な拡張の破壊的変更も多ければ不安定だがそこは知らん

安定してる言語の話題たまに出るけどどの言語もそれなりに不安定という結論以外になったとこ見たことない
422デフォルトの名無しさん
2018/01/03(水) 10:58:30.19ID:HUvqSveQ
>>420
そらLispよ
423デフォルトの名無しさん
2018/01/03(水) 13:51:49.16
枯れ
424デフォルトの名無しさん
2018/01/03(水) 19:39:52.12ID:JH/i0Zss
そういや使用安定してるからで極地でCLが使われてたな
425デフォルトの名無しさん
2018/01/03(水) 19:43:20.34ID:3L8KTbvi
x86アセンブラ、めっちゃ枯れてますよ。
426デフォルトの名無しさん
2018/01/04(木) 01:39:52.22ID:T+TxDQDt
関数型プログラミング言語Haskell Part31©2ch.net	->画像>6枚
427デフォルトの名無しさん
2018/01/05(金) 10:31:44.65ID:HcxYMAOQ
>>407
アドバイスありがとうございました。
参考にします。
428デフォルトの名無しさん
2018/01/06(土) 13:51:16.58ID:JNGs0wZB
再帰ってわかりにくくないですか?
実際によく使われているんですか?
429デフォルトの名無しさん
2018/01/06(土) 14:01:05.48ID:NNbzWCOQ
扱うデータ構造が再帰的なら(連結リストとか木とか)
アルゴリズムも再帰の方が自然
430デフォルトの名無しさん
2018/01/06(土) 14:28:29.03
初見だと脳のワーキングメモリをオーバーフローして拒絶反応を示すけど
慣れたら問題先送りにしちゃって尚且つ最後には解決しちゃう魔法みたいで気持ちいいよ
431デフォルトの名無しさん
2018/01/06(土) 14:36:45.23ID:knmVGZUA
ループより再帰が好きだけどスタック気にしたりわざわざ末尾再帰にしなきゃいけなかったりするのは割とめんどい
432デフォルトの名無しさん
2018/01/06(土) 17:33:04.10ID:CqdhyGHO
breakとcontinueとreturnとthrowは関数ではない
関数ではないものを見るとマクロを書きたがるのがLisp
Haskellはマクロを使わない技術が発達したからなんでも関数を使う
433デフォルトの名無しさん
2018/01/06(土) 18:38:34.20ID:ttApPSmY
HaskellはCのプリプロセッサ(俗に言うマクロ)を使えるのでは
434デフォルトの名無しさん
2018/01/06(土) 22:41:09.20ID:dYI3l1P4
エラーの原因を教えて下さい
https://ideone.com/yGg3zM#stdin
435デフォルトの名無しさん
2018/01/06(土) 23:19:28.76ID:knmVGZUA
>>434
はい
https://ideone.com/0gDEIW
436デフォルトの名無しさん
2018/01/06(土) 23:31:44.70ID:ttApPSmY
エラーの原因を教えてほしいという奴にエラーの原因を教えないのがHaskellerか
また同様のエラーが出てもこのスレにくればコード書き直してやるよっていう優しさか
437デフォルトの名無しさん
2018/01/07(日) 00:03:32.13ID:CSD5n8Vo
ハスケラーならコードで会話できるだろ?
438デフォルトの名無しさん
2018/01/07(日) 00:18:57.89ID:gMArQtmD
Windows10でstackのプロジェクトをbuildするとエラーが出てビルド出来ないお(´・ω・`)

While building custom Setup.hs for package ........
..
..
..
Process exited with code: ExitFailure 1
439デフォルトの名無しさん
2018/01/07(日) 00:26:59.29ID:dTX3sH72
ボウヤは『windows10 haskell stack build error』でググるとかはしたのかい?
440デフォルトの名無しさん
2018/01/07(日) 00:50:52.73
飢える者に魚を与えても一日しか救えない
釣りを教えれば一生救えるやもしれぬ
してみれば、>>435は魚を与えたのじゃ
441デフォルトの名無しさん
2018/01/07(日) 01:00:14.22ID:r/irtiIZ
賢者乙
442デフォルトの名無しさん
2018/01/07(日) 01:20:55.91ID:gMArQtmD
>>434
>>435
条件ミスってて全部otherwiseに行ってたのも直したらちゃんと動きました
ありがとうございます
443デフォルトの名無しさん
2018/01/07(日) 08:44:45.58ID:zleJ4q+h
>>438
Windowsで動かないパッケージ使ってるとか?
444デフォルトの名無しさん
2018/01/07(日) 18:07:55.57ID:HpBedZUr
>>428
好き嫌いというか、ループはループ中で変数を操作するから値を返せるのであって、変数を言語から排除すれば自然にループも排除されるんじゃないの?

ループがあっても再帰が不要にはならない。でも再帰があればループ不要は本当の話。だからこそ変数を排除した言語があるんでしょ。
445デフォルトの名無しさん
2018/01/07(日) 20:35:35.56ID:gMArQtmD
>>438 の原因はプロジェクトのパスに日本語が含まれているからでした...orz
446デフォルトの名無しさん
2018/01/07(日) 21:17:59.03
悲しいかな
447デフォルトの名無しさん
2018/01/08(月) 01:26:04.04ID:LRSoqKZx
haskellプログラミングできたンゴ
関数型プログラミング言語Haskell Part31©2ch.net	->画像>6枚
448デフォルトの名無しさん
2018/01/08(月) 01:40:46.80ID:6LQHZKeL
挿入ソートか やるじゃん
449デフォルトの名無しさん
2018/01/08(月) 02:31:15.01ID:oivpkpFd
>>447
toBarの仕事はもっと少なくした方がいいよー
ソートとかは既存関数で手抜きしたけど、参考までに
https://ideone.com/fGFOEl
450デフォルトの名無しさん
2018/01/08(月) 10:11:27.13ID:ai+lPEJ3
stack の使い方について質問です。

stack new で作ったプロジェクトの package.yaml に executables と tests が設定されています。
その上で、tests のみのビルドあるいはビルド&実行を行うという事をしたいです。
しかしうまく行きません。
余計なものまでビルドされたり、実行されたりします。

executables には cmd-exe というターゲットがひとつ、tests には cmd-test というターゲットがひとつあるとします。
まず cmd-test のビルドだけを行いたく、stack build :cmd-test コマンドを実行してみました。
すると、cmd-exe と cmd-test がビルドされ、かつ cmd-test が実行されてしまいました。

今度は cmd-test のビルドと実行を行いたく、stack test :cmd-test コマンドを実行してみました。
すると、こちらも cmd-exe も一緒にビルドされてしまいました。

cmd-exe をビルドしないで cmd-test のみをビルドする方法、
そして cmd-test を実行しないでビルドのみを行う方法はあるでしょうか。
451デフォルトの名無しさん
2018/01/08(月) 12:02:33.14ID:ai+lPEJ3
>>450
実行しないでビルドだけ行うのは --no-run-tests オプションを付けることで実現できましたが、
それでもまだ cmd-exe の方も同時にビルドされてしまいます。
452デフォルトの名無しさん
2018/01/08(月) 13:58:59.98
Haskell、その学習に多大な苦労を強いる割に遅過ぎないですかね
http://benchmarksgame.alioth.debian.org/u64q/haskell.html
453デフォルトの名無しさん
2018/01/08(月) 14:07:49.41ID:jbPveYoe
普通の言語のできない数学者がプログラミングできるようにするための言語だ
彼らにはたやすい
454デフォルトの名無しさん
2018/01/08(月) 14:17:08.35ID:LRSoqKZx
速さよりもバグの少なさが長点なのでは...
455デフォルトの名無しさん
2018/01/08(月) 15:59:26.22ID:eAAAEsR7
デフォルト遅延評価に破壊的更新超苦手とかいうパフォーマンス的には冗談みたいな存在なのに
静的型付コンパイルというだけでVMアンチ勢から謎の期待を向けられる言語Haskell
456デフォルトの名無しさん
2018/01/08(月) 16:35:37.59ID:puck2ipT
この先haskellで良いGUIフレームワークって出ると思う?
457デフォルトの名無しさん
2018/01/08(月) 16:52:31.19ID:ai+lPEJ3
>>456
現行のGUIフレームワークの問題点は何でしょうか?
458デフォルトの名無しさん
2018/01/08(月) 16:54:40.06ID:edhbuhXG
汎用かつネイティブの作法に従うものがいいなぁ。
459デフォルトの名無しさん
2018/01/08(月) 21:39:25.30ID:fNfSzvO3
>>452

いつからHaskellの5行クイックソートが遅いと錯覚していた? - Qiita
https://qiita.com/as_capabl/items/39e55e7a035dea4dc93a
460デフォルトの名無しさん
2018/01/08(月) 22:56:46.89ID:LRSoqKZx
おまえらってIDE何使ってるの?
461デフォルトの名無しさん
2018/01/09(火) 07:52:35.28ID:jdJt8oqE
>>459
>Haskellは遅延評価なので、リストを返す関数だからといって中間データとしてのリストを必ず作成する訳ではありませんから、
>結果を即座にfromListで書き込めば実質的に配列を出力する事が可能です。
ほんとぉ?
もう融合変換なんていらんやん
462デフォルトの名無しさん
2018/01/09(火) 11:11:12.53ID:4pyxMvRN
中間データが不要(融合変換が不要とは言ってない)
463デフォルトの名無しさん
2018/01/09(火) 11:23:20.89ID:jdJt8oqE
せやな
リストのfold/buildやな
464デフォルトの名無しさん
2018/01/09(火) 13:28:03.42ID:4pyxMvRN
まあグラフ簡約がなかったらどうなるか実験した方がいいと思う
465デフォルトの名無しさん
2018/01/09(火) 22:16:54.64ID:zX7pY+gm
>>455
遅延評価=遅いって考える理由は?
466デフォルトの名無しさん
2018/01/09(火) 22:55:36.65ID:0kb7P5He
>>465
ほとんどの場合サンクを作るのは無駄だし最適化にも不利
467デフォルトの名無しさん
2018/01/10(水) 00:53:00.88
haskellのコンパイルエラーメッセージが難解すぎる
468デフォルトの名無しさん
2018/01/10(水) 00:56:33.80
どうすれば直るか教えて下さい。
https://ideone.com/VhTqZE
469デフォルトの名無しさん
2018/01/10(水) 01:23:11.48ID:2r/l0e/u
>>468
問題があるのは10行目 return (shuffle (i - 1) flipped)
これの型は実際には、IO (IO [Int]) だが期待されているのは IO [Int] だ。
IO(などのモナド) に包むために使われる return はここでは不要。外すと IO [Int] になってコンパイル通る。
470デフォルトの名無しさん
2018/01/10(水) 01:29:37.26ID:2r/l0e/u
>>460
> おまえらってIDE何使ってるの?
>>73 あたりで同じ質問があった。VSCode, spacemacs が人気
471デフォルトの名無しさん
2018/01/10(水) 01:29:51.07
なるほど!
472デフォルトの名無しさん
2018/01/10(水) 18:04:01.49ID:CldIXwzW
>>455
この話をすると決まってStrict拡張を持ち出してくるのが痛いHaskellerの特徴だな
じゃあ最初から遅延評価なんかすんじゃねえよ
473デフォルトの名無しさん
2018/01/10(水) 20:08:59.81ID:YX2ZZ0s/
パフォーマンス的にはC/C++が王道だから素直にFFIを持ち出すのが王道
C/C++とFFIを無視するのは某言語の痛い特徴だよ
474デフォルトの名無しさん
2018/01/10(水) 21:51:06.06ID:CldIXwzW
久々にHaskellで簡単なプログラム書いたんだけど
構造体使うだけでStateモナドもlensも必要になるあたりやっぱ欠陥言語だなこれ
最初から言語機能にいれとけや
475デフォルトの名無しさん
2018/01/10(水) 22:51:06.88
bindは1つの引数しかできないんですか?
アプリカティブスタイルを使わないと無理ですか?
https://qiita.com/7shi/items/85afd7bbd5d6c4115ad6
476デフォルトの名無しさん
2018/01/11(木) 00:40:52.51ID:vZTNKaQ4
>>466
その理屈だと遅延評価しない方は更に遅いじゃん。
477デフォルトの名無しさん
2018/01/11(木) 11:20:18.33ID:OitKCfql
欠陥のない言語があるならぜひ知りたいなあ
478デフォルトの名無しさん
2018/01/11(木) 11:34:32.09ID:yR+nWLrx
クラスより構造体
メソッドよりフィールドが必要という常識を取り戻すだけで十年単位の時間がかかる
479デフォルトの名無しさん
2018/01/11(木) 16:22:14.98ID:I4QPsg6T
>>476
480デフォルトの名無しさん
2018/01/11(木) 16:32:20.02ID:+cHMvoU8
haskellでできることは他の言語だと難しくて
他の言語だと簡単なことはhaskellだと難しいという
481デフォルトの名無しさん
2018/01/11(木) 23:26:54.83ID:CSSFSU7v
>>480
変態言語やん
482デフォルトの名無しさん
2018/01/11(木) 23:57:27.46ID:kh3sTkz1
それ、褒め言葉やで
483デフォルトの名無しさん
2018/01/12(金) 01:48:25.78ID:GmCW/u04
スクリプト言語を許容できてHaskellをその性能から許容できないというのは理解できない感覚
484デフォルトの名無しさん
2018/01/12(金) 11:48:37.84ID:xeu4OQ73
感覚ではなく統計の取り方がそうなってるんだな
シェルスクリプトなんてプログラムのコンパイル時と起動前に実行するやつだから
起動するまで何分待たされてもベンチマークには関係ないから
485デフォルトの名無しさん
2018/01/14(日) 11:36:12.66ID:OihlBKK7
型推論まわりを雰囲気で使っていました。
初等的なケースではそれでも問題なかったんですけど、
OVERLAPS とか type family とか出てきてから付いていけなくなりました。

助けてください。
https://ideone.com/XQ17ms
486デフォルトの名無しさん
2018/01/14(日) 23:23:09.38ID:ppap/O0M
性能からって話はないな。
主にファイルIOやネットワークIOの気軽さの問題だと思うけど。
487デフォルトの名無しさん
2018/01/14(日) 23:30:08.22ID:fSoR9A9v
初心者だから適当だけどそこら辺はバンバンFFI使えばいいんじゃないのとか思ってしまう
そういうもんでもないのか
488デフォルトの名無しさん
2018/01/14(日) 23:51:01.69ID:Qz3+ZXNT
>>485
https://teratail.com/
489デフォルトの名無しさん
2018/01/15(月) 00:04:51.86ID:bAToeOxa
Stream Fusionの御利益を受けるには、
vectorパッケージでmapとかfoldみたいなので書けるところはすべて書いていく、
という方針でおけ?
490デフォルトの名無しさん
2018/01/15(月) 00:57:56.87ID:NOFCncFl
>>488 そのサイト、人いないような… とりあえずありがとうです。
491デフォルトの名無しさん
2018/01/15(月) 08:59:07.15ID:Duolqkdz
>>485
本質的にはこれと同じかな
https://ideone.com/hIoLnD
undefinedは()にもなれるから失敗してるみたい?
492デフォルトの名無しさん
2018/01/15(月) 18:46:49.75ID:v1U8cihy
>>485
Freer Effectsが、だいたいわかった: 11-7 OVERLAPSプラグマ - Qiita
https://qiita.com/YoshikuniJujo/items/6b57a2778b04f54cac1e#_reference-98a5024f7096c614804a
493デフォルトの名無しさん
2018/01/16(火) 00:59:29.28ID:4jams3dQ
>>485
横レスですが
(Hoo b ~ HooBar)
(b ~ Bar)
これのチルダってどういう意味なんですか(当方初心者です・・・)
494デフォルトの名無しさん
2018/01/19(金) 00:29:15.30ID:ZfC+YGVh
haskell普及させたい言うわりには初心者に優しくない
495デフォルトの名無しさん
2018/01/19(金) 00:41:33.13ID:bqrf+XbL
どちらかというと初心者から中級者になるまでのミッシングリンクが上手く埋められてない
H本の次のレベルにふさわしいものがないと言ったほうがいいか
496デフォルトの名無しさん
2018/01/19(金) 00:53:08.18ID:ZfC+YGVh
それhaskell以外の言語でもだいたいそうじゃね?
497485
2018/01/19(金) 01:45:02.15ID:uCK/Ej3G
皆様ありがとうございました。勉強しました。

型推論の全体を概観する為に、以下の記事がわかりやすかったです。
http://yu-i9.hatenablog.com/entry/thih
https://goo.gl/MH2cCx
型推論は、ざっくり 単一化 -> 帰結 の順に行われ、前者が頭部の具体化、後者は制約のチェックの役割になっているようです。

今回のケースで出たどのコードも単一化は通ってるんだけど、帰結の処理の際にエラーが出ていると思います。
>> 491 さんが単純化してくれたケースは、ご指摘の通り undefined がどちらのインスタンスにもなりうるため、"あいまいだ"という旨のエラーが出ていました。
これは例えば OVERLAPPING を INCOHERENT に置き換えると通ります。テキトウな順になるということです(OVERLAPSの解説は頂いた重城サンの記事(>> 492)が参考になりました)。
498485
2018/01/19(金) 01:45:29.89ID:uCK/Ej3G
元の >> 485 のコードは型の属(type families)と等式制約が絡んだものです。
hoo :: ( 型制約 ) => 頭部
型制約中に現れるチルダは等式制約と呼ばれていて、これは type families が導入されたときに追加された文法らしい(>> 493)。
ざっくり言うと、Hoo b ~ HooBar は「型の関数 Hoo に型 b を適用したものが型 HooBar と等しくなる、という制約」を頭部に課します。
詳しくは http://www.kotha.net/ghcguide_ja/7.6.2/equality-constraints.html

俺がコンパイラに期待したのは、 f :: (Hoo b ~ HooBar) => b の型シグニチャによって、b ~ Bar を類推することだったんですけど、どうもそれがうまく行っていない。
結局、帰結処理で type family や等式制約がどのように処理されるのかの資料は見つからなかったのですが、失敗する理由はわかりました。
この記事に答えがありました。 https://qiita.com/lotz/items/6c038698c8f04f57113a
type instance Hoo Bar = HooBar だけでは、それ以外のインスタンス、例えば Hoo () などが HooBar とおなじになる可能性を排せないので、b を一意に決定することができないらしいんです。
型関数が単射であることをコンパイラに伝えれば解決です。言語拡張TypeFamilyDependencies を加え、
- type family Hoo b :: *
+ type family Hoo b = r | r -> b
と書き換えると、>> 485 のプログラムはコンパイルを通ります。
499デフォルトの名無しさん
2018/01/19(金) 07:41:26.43ID:qWabwUd0
>>495
リスト本読め
500デフォルトの名無しさん
2018/01/19(金) 15:11:02.24ID:uCK/Ej3G
>>450
stack で指定したターゲット以外の余計なものがビルドされてしまう問題は、バグの可能性があります。
https://github.com/commercialhaskell/stack/issues/1406
501デフォルトの名無しさん
2018/01/20(土) 08:32:17.48ID:lXdHdJ+E
Haskellの型コンストラクタがいまいち理解できなかったけど、ラムダキューブでやっと理解できた。
ポリモーフィックな関数と所謂依存型とセットなんだね。

型コンストラクタとそいつで作られる型がオーバーロードできるのは、紛らわしい気がする。
502デフォルトの名無しさん
2018/01/20(土) 09:37:30.01ID:/5XEeDZf
>>494
何となく学習じゃあ、解決したい問題領域が曖昧なままだからな、何やっても難しく感じるよ。
503デフォルトの名無しさん
2018/01/20(土) 16:49:26.40ID:I7uywYWL
もし依存型があったらリストの長さにより異なる型を使うね
でも遅延評価はリストの長さが有限でも無限でも同じ型にする
相性悪そう
504493
2018/01/20(土) 18:46:54.97ID:oxqYKpr1
>>498
ありがとうございます
505デフォルトの名無しさん
2018/01/24(水) 05:27:57.73ID:/4CMqd4L
hieとVSCode使ってるんだが、ドキュメントや入力候補が「読み込んでます」ってなって一向に読み込まれないんだが
お前らは問題なく使えてるの?っていうかどんな環境でやってる?
506デフォルトの名無しさん
2018/01/24(水) 06:36:24.95ID:EfrrCAID
https://csacademy.com/code/ofIwdZBg/

くだらない
507デフォルトの名無しさん
2018/01/24(水) 18:54:42.65ID:A4/TKZVr
csacademyってコード貼り付けサイトして定着してんの?
508デフォルトの名無しさん
2018/01/27(土) 12:07:53.22ID:3P02pcTc
Haskellの良いところは宣言的であることです。
宣言的であるということはCSSのように素人には使いこなせないということです。
素人には使いこなせなくすることでウェブデザイナーという奇妙な職業が生まれました。
同様にHaskellもハスケラーという新たな職業を生み出す可能性があります。
509デフォルトの名無しさん
2018/01/27(土) 17:18:06.19ID:Y4G+sRnH
コードの質の下限が他の言語より高いなとは思う
例えばPHPなんかは、プログラマの能力によって質の良し悪しのギャップが非常に大きい
それに対してHaskellは、上を見たらキリがないが、下を見てもコンパイルエラーを起こさない時点である程度の質が担保されてる
その分覚えることが多いし、短期的な開発効率も下がりそうだけど、長い目で改修や保守を考えると悪くなさそう
510デフォルトの名無しさん
2018/01/27(土) 17:19:06.86ID:Y4G+sRnH
>>509
PHPと比べてもしょうがないな…Javaあたりに読み替えといてください
511デフォルトの名無しさん
2018/01/27(土) 19:16:11.49ID:S0om7f3c
> コードの質の下限が他の言語より高いなとは思う

>>133
512デフォルトの名無しさん
2018/01/31(水) 04:05:44.40ID:hDoqvddW
入門書
入門書
入門書
 :
Haskell 中級書出して
513デフォルトの名無しさん
2018/01/31(水) 04:10:45.92ID:hCnyArbk
Effective Haskell ください
514デフォルトの名無しさん
2018/01/31(水) 07:45:42.81ID:jydCvtlX
Haskell Wikibooksとか中上級くらいでないの?
515デフォルトの名無しさん
2018/01/31(水) 18:11:04.78ID:F9QE8ZcE
「プログラミングHaskell」(Graham Hutton (著),‎ 山本 和彦 (翻訳))
って入門者向け?
516デフォルトの名無しさん
2018/01/31(水) 18:19:54.71ID:6Wa3kgEE
>>515
入門者向けには難しい
入門書を読み終えた初心者には物足りない
そんな本
517デフォルトの名無しさん
2018/02/01(木) 08:00:02.87ID:Xuh9WGFR
ghci で
> let x :: (a ~ Int) => a;x = undefined
として実際の型をみると
> :t x
x :: Int
に変わっている。これはどういう仕組みによるもの?
518デフォルトの名無しさん
2018/02/02(金) 14:28:38.64ID:iEY/rJwQ
引数が Show a だったらTrue, 違ったら False を返す関数
isShow :: a -> Bool
は可能ですか?
519デフォルトの名無しさん
2018/02/02(金) 20:19:41.59ID:NSR+boPa
Haskell外部ライブラリの型をShowクラスのインスタンスにしてデバッグを楽にする
http://blog.kzfmix.com/entry/1349904819

本物のプログラマはHaskellを使う - 第15回 Haskellでのデバッグのコツをつかむ:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20071204/288630/

型に対して後から型クラスのインスタンス宣言を自動導出するには - Qiita
https://qiita.com/hyone/items/a47b905936e55147fe59
520デフォルトの名無しさん
2018/02/02(金) 20:45:14.24ID:PIo4kucW
https://wiki.haskell.org/GHC/AdvancedOverlap
これは自前でインスタンスの一覧作ってる
521デフォルトの名無しさん
2018/02/03(土) 00:14:03.29ID:st4XedSX
このコード中に isShow というのがある

https://hackage.haskell.org/package/fitspec-0.4.4/docs/src/Test-FitSpec-Derive.html
522518
2018/02/03(土) 00:59:05.30ID:z/YnSxMM
AdvancedOverlapは外でShowのインスタンスが増えた時に対応できないです。
isInstanceOf ! そういうのがあるんですか。調べてみます。

これを通して実現したい機能は、頭部ではなく型制約でオーバーロードしたいというもの。
具体的にはdiagramsパッケージの元で作ったダイアグラムを画像化したい。
同じ関数で Show a も画像化したい。
一見簡単そうなんですけど、普通に合成したダイアグラムの頭部に具体的な型がつかないので、
通常の型クラスのインスタンス化でオーバーロードできない。
instance Show a => Hoo a where ...
instance (a ~ Diagram B) => Hoo a where ...
-- コンパイルエラー!
523デフォルトの名無しさん
2018/02/03(土) 22:01:25.34ID:GVlapN64
すみません、
Huttonの「プログラミングHaskell」で
学習をしているのですが
練習問題の解答が
著者や役者のサイト等を見ても見当たらなく
もし掲載のページを知ってたら教えて下さい。
524デフォルトの名無しさん
2018/02/04(日) 04:24:30.53ID:fRCSu2fr
プログラミングHaskell 訳者によるサポートページ
http://www.mew.org/~kazu/doc/book/haskell.html
> 練習問題の答は、原著者のサポートページにあります。
525523
2018/02/04(日) 12:22:57.81ID:VtcsF5YK
>>524
すみません。
原著者のサポートページでは回答例を見つける事ができませんでした。
翻訳されていないの新版には回答例が掲載されているようですね。
526デフォルトの名無しさん
2018/02/04(日) 14:14:55.60ID:+WAJGnPT
コード例とかならここにあるみたいだけど
http://www.cs.nott.ac.uk/~pszgmh/book-old.html
527デフォルトの名無しさん
2018/02/04(日) 19:26:34.09ID:VtcsF5YK
>>524 >>526

ありがとうございます。
学習の参考にさせて頂きます。
528デフォルトの名無しさん
2018/02/22(木) 01:33:31.18ID:rShSr6qS
class Hoo a
x :: Hoo a => a -> a
y :: (Hoo a => a) -> a
x = undefined
y = undefined
-- f :: a -> a
-- f a = x a -- コンパイル通らない
g :: a -> a
g a = y a -- コンパイル通る。なんでだ
-- h = y :: a -> a -- 通らない
529526
2018/02/23(金) 11:53:44.22ID:QhNOj82G
ghcを8.0.2 から 8.2.2に上げた。
h = y :: a -> a -- 通るようになった
530デフォルトの名無しさん
2018/03/05(月) 00:25:18.18ID:rygpwPFq
このコンテストに参加してるHaskellerたったの6人と少ないのでチミたちも参加したまえ

https://www.codingame.com/leaderboards/challenge/botters-of-the-galaxy/global?column=slanguage&;value=Haskell
531デフォルトの名無しさん
2018/03/08(木) 07:40:29.03ID:NOpOgpfl
emacsでSymbols function definition is void: haskell-debug
てエラー文が出ちゃうんですが、原因わかる人いませんか、、
正確にはspacemacsのinteroです、、
532デフォルトの名無しさん
2018/03/12(月) 03:18:18.08ID:IKn+w3cq
tanakhがイキリー田中って呼ばれているみたいだけどイキリーってどういう意味?

550番組の途中ですがアフィサイトへの転載は禁止です (ワンミングク MMda-oDZj)2018/03/11(日) 22:51:59.49ID:2Wu75Uw+M
pezyスパコン社員の
イキリー田中さん曰わく


Hideyuki Tanaka
@tanakh
最近ずっと国会で、国会じゃなくて裁判所でやるようなことばっかりやってないすか。もう逆に裁判所で政策議論した方が三権分立的にいいんじゃないすか(適当)
午前0:06 · 2018年3月10日
https://twitter.com/tanakh/status/972126503352676352
533デフォルトの名無しさん
2018/03/12(月) 03:22:34.32ID:IdW8RVi3
裁判所でもこんなあほなことやらん
534デフォルトの名無しさん
2018/03/12(月) 06:27:09.63ID:uoSNo/WD
スレチの相手するなバカ
535デフォルトの名無しさん
2018/03/12(月) 07:14:31.89ID:IKn+w3cq
Haskellで一番売れている本の訳者様だぞ
536デフォルトの名無しさん
2018/03/12(月) 11:28:56.92ID:67958OQ2
著者じゃなく訳者程度ってのをよく示しているのでは
537デフォルトの名無しさん
2018/03/12(月) 12:35:28.53ID:jLS1yZxx
売上データを証拠として提出する発想が裁判所だな
裁判の真似事をやってるのは統計学者だ
538デフォルトの名無しさん
2018/03/12(月) 12:37:27.36ID:Z6lm3+Nm
過疎を理由にスレチを正当化してはいけない
539デフォルトの名無しさん
2018/03/12(月) 17:16:39.91
最近毛の壁みないな
540デフォルトの名無しさん
2018/04/03(火) 13:16:07.09ID:CL00mLmV
モナドの中での条件分岐ってはどうやればいいでしょうか

m0 >>= m1 arg1 【 >>= m2 arg2 】 >>= mN argN

【 】のブロックを条件に応じて呼び出すかどうかを制御したいです
whenだと値が取り出せない
541デフォルトの名無しさん
2018/04/03(火) 13:25:16.21ID:CL00mLmV
自己解決しました
普通にif使えるんですね
542デフォルトの名無しさん
2018/04/03(火) 16:36:19.17ID:bMx8P0pN
遅延評価って面白いね
ぱっと見挙動がわかりにくいのと使い所がみつけづらいのが難点だけど
543デフォルトの名無しさん
2018/04/03(火) 20:15:57.85ID:BMbwb1La
https://twitter.com/fujiy0/status/980831517973688325

Haskellのビジュアルプログラミング面白そうだけど面倒そうでもあるね
544デフォルトの名無しさん
2018/04/13(金) 01:52:39.63ID:UkwKelSp
purescriptをめっちゃ強化してクロスコンパイル&ネイティブコンパイル&jsコンパイル&wasmコンパイル可能でさらにビルド速度とGC性能をocaml並に出来ませんか😱
545デフォルトの名無しさん
2018/04/17(火) 11:35:04.71ID:qNbsUSYn
もし自作の型が Generic クラスのインスタンスなら、
その型を Num クラスのインスタンスにするのは容易でボイラープレートを書くだけだ、
という話を聞いたのですが、どういうことでしょうか。
546デフォルトの名無しさん
2018/04/17(火) 15:15:39.87ID:xGORc44D
Genericは代数的データ型の代数的構造に対して型クラスを使えるようにする仕組みという感じだから
例えば自然数の型クラスがあったらdata Nat = Zero | Succ Natっぽい型をインスタンスにできる(ようにできる)
data List a = Nil | Cons (List a)とかもList a=Natでいけそうだけど詳しいことは知らない
でNumは整数の型クラスだから符号情報を持たせた自然数っぽい型で考えればいいと思う
547デフォルトの名無しさん
2018/04/18(水) 21:28:14.85ID:BYjTZdeC
FRPのBehaviorとEventの構成ってなんか恣意的なのかなって印象で手付かずだったけど、
型がそれぞれ関数と直積で、カリーハワード考えるとForAllとExistsですよて説明見たら、
何に効いてくるのかまだよく分からんけど、真面目にやろうかなと思った。
548デフォルトの名無しさん
2018/04/20(金) 15:57:50.03ID:0HOWAbgI
Yesod のオライリー本ってまだ翻訳されてないの
549デフォルトの名無しさん
2018/04/20(金) 19:31:13.34ID:wBOVlPyY
print "日本語"
で日本語を表示するにはどうしたらいいですか?
550デフォルトの名無しさん
2018/04/20(金) 20:11:46.72ID:kdAO2jaP
https://hackage.haskell.org/package/base-4.11.0.0/docs/System-IO.html#g:23
551デフォルトの名無しさん
2018/04/20(金) 20:49:36.18ID:4Eu7Barh
できないんですね
わかりました
552デフォルトの名無しさん
2018/04/20(金) 21:00:49.10ID:0HOWAbgI
できますよ
553デフォルトの名無しさん
2018/04/26(木) 12:38:49.74ID:X3BRJjDS
公開したくない自作データ型を引数に持つ自作関数をhspecでテストする方法を探しています。

自作のモジュールは2つあり、ひとつはテストしたい関数 g がある ModSub、もうひとつは ModSub を使用する ModMain です。

-----[ ModMain.hs ]-----
module ModMain where
import ExtLib (calc) -- 外部ライブラリ
import ModSub

f = calc g 他のいくつかの引数 -- 他にも関数を呼び複雑な計算をする

-----[ ModSub.hs ]-----
module ModSub (g) where
import Control.Applicative
import ExtLib (SomethingClass) -- 外部ライブラリ

data D = D Bool Int
instance SomethingClass D where
 someFunc = pure D <*> makeBool 適当 <*> makeInt 適当

g (D b i) = 何か

ExtLib の calc 関数は Something クラスのインスタンス型を引数に持つ関数を取り、その具体的な型は知る必要がありません。
私はアプリケーションの作成に当たって公開しなても動く設計のものは公開しないスタンスです。
なので、ModSub モジュールは D 型のコンストラクタを公開していません。

このような状況ではテストモジュールからも D 型が使えずテストできないため、私は2つの選択肢を考えました。
ひとつは、諦めてスタンスを曲げて D 型のコンストラクタを公開する。
もうひとつは、D 型を別のモジュール InnerModSub 内に定義して公開し、ModSub モジュールとテストモジュールは InnerModSub モジュールを使う。
そして、ModMain モジュールや他のモジュールは決して InnerModSub モジュールを使わないようルールを設ける。

他に何か良い方法はあるでしょうか。
554デフォルトの名無しさん
2018/04/26(木) 22:19:07.30ID:XXRDrUvo
>>553
ふたつめの選択肢が定番の解決策っぽい。Internalディレクトリに実装をまとめといて上層でre-export。
https://disarli.me/blog/haskell/testing/2017/08/21/testing-non-exported-functions-with-haskell.html
555デフォルトの名無しさん
2018/04/27(金) 07:51:16.88ID:5zUTZf4m
>>554
アドバイスありがとうございます。

その方法でやっても、さらに、そのモジュールを exposed-midules に置くかどうかの選択肢があるのですね。

検討してみます。
556デフォルトの名無しさん
2018/05/03(木) 01:36:32.06ID:kRKy+vnx
ようやくwin10 wslでghcが遅かった件直った感じかな
557デフォルトの名無しさん
2018/05/04(金) 07:55:06.89ID:losdahgV
http://neilmitchell.blogspot.jp/2018/04/dont-fear-monad-t-shirts.html?m=1
外国人のこういうセンス好き
558デフォルトの名無しさん
2018/05/04(金) 08:58:01.41ID:eKrFMwvm
日本人の「モナド萌え〜」Tシャツはないの?
559デフォルトの名無しさん
2018/05/06(日) 09:54:40.96ID:KRn6cuFA
モナまでは可愛いが、油断してるとドがついて怖い感じ。
560デフォルトの名無しさん
2018/05/06(日) 10:12:01.34ID:KRn6cuFA
Reflexやってる人います?Stackと親和的じゃないから結局諦めちゃった。

Threepenny-GUIはシンプルで良いね。Threepennyで作ったのをiOSやAndroidに移植できるんかな。
561デフォルトの名無しさん
2018/05/09(水) 03:57:47.41ID:yAd9yFdW
>>557
三拍子揃っててだめだった
562デフォルトの名無しさん
2018/05/16(水) 06:39:11.37ID:KuTIShdq
intellijにhaskellいれようとしてたらいくらやってもだめだったの
よーくみたらWindow Defenderがじゃましてた
はらたつー
563デフォルトの名無しさん
2018/05/16(水) 14:15:35.67ID:86oQSZWQ
MS「永続性はウイルス」
564デフォルトの名無しさん
2018/05/20(日) 16:01:44.58ID:h2BQfP5S
random パッケージの System.Random モジュールの split 関数は、
新しい RandomGen クラスのインスタンスをなぜ2つも生成するのでしょうか。

2つのインスタンスが要るのなら、引数の1つ目があるのだから、
新たに生成するのも1つで十分だと思うのです。
もっと必要なら、この処理を繰り返せばいいのでは?

私は何か勘違いをしているのでしょうか。
565デフォルトの名無しさん
2018/05/20(日) 17:35:56.32ID:FfB1JAMU
そもそもnextだってgetValとnextGenに分けてもいいけどね
まあ基本的には設計とか効率の問題なんじゃない?
それに戻り値が一つのsplitは引数の方がそのままもう一回splitされないように注意する必要があるし
566デフォルトの名無しさん
2018/05/23(水) 19:45:00.92ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

P0GWF
567デフォルトの名無しさん
2018/05/24(木) 10:55:19.93ID:cPlRxlDn
567
568デフォルトの名無しさん
2018/05/25(金) 21:11:33.96ID:cptzVN/K
エスパー来る

ところで、関数型言語のこの世の春は来ますか?
569デフォルトの名無しさん
2018/05/26(土) 04:33:44.12ID:d8ZkW1Ij
GHCのインストール先の変え方教えて
ちなWindows
Cドライブに入れたくない
570デフォルトの名無しさん
2018/05/26(土) 04:40:40.86ID:d8ZkW1Ij
Stackのコンフィグをイジる?
571デフォルトの名無しさん
2018/05/31(木) 00:34:57.11ID:zA1zBE3e
haskellの練習してる初心者なんですが2進数の文字列表現を10進数の整数に変換する処理ってこんな感じで大丈夫でしょうか? https://csacademy.com/code/CsGalG5X/
572デフォルトの名無しさん
2018/05/31(木) 01:09:51.63ID:CXLwfWM5
単に数値にしてるだけであって、10進数に変換して表示してるのはprintさんでしょ?
573デフォルトの名無しさん
2018/05/31(木) 08:07:17.08ID:Dl0sFDMW
Showが忖度したのであってInteger大臣が文字列化を指示したわけではない
574デフォルトの名無しさん
2018/06/01(金) 00:33:16.96ID:vzHrz6jW
10進数への変換も自前で実装しろって話の流れ?
575デフォルトの名無しさん
2018/06/01(金) 01:50:05.31ID:0E17r036
>>571が何を目指すのかによる。
576デフォルトの名無しさん
2018/06/05(火) 20:09:41.67ID:pRSj0ubW
どうでもいいけど、それぞれのGHC言語拡張の名前で単数形と複数形の違いがいまいち分からん。
うろ覚えで複数形で書いてコンパイルエラーになったり。

命名規則とかあるんかな?
577デフォルトの名無しさん
2018/06/06(水) 07:44:03.32ID:azXcBu8b
使った中じゃ英語で説明するのに複数形が使われるであろうものなら
大体複数形だったと思うけど
カタカナ語のノリでやってるから割と間違う
578デフォルトの名無しさん
2018/06/13(水) 21:49:00.45ID:i4vh63zU
すごいH本に煽られるとまじでムカつくんだけど
579デフォルトの名無しさん
2018/06/17(日) 22:53:19.15ID:kUxbeqDh
すごいHだから勃起botをリツイートしてるのか
580デフォルトの名無しさん
2018/06/18(月) 09:11:06.80ID:QNagypIW
おい!あの岡部健(毛の壁)がgithubで活動を再開してるぞ!
581デフォルトの名無しさん
2018/06/18(月) 18:39:20.54ID:MmynirXE
IT芸人が新作コンテンツ提供開始か
582 ◆QZaw55cn4c
2018/06/18(月) 20:51:53.97ID:OiAJbwiy
>>580
本当ですか!ぜひお会いしたい!
583デフォルトの名無しさん
2018/06/27(水) 12:31:39.52ID:+XG/5Wm3
今時コンパイルとか流行らないよ
サクッと書けても実行までが面倒だと普及しない
もっと標準ライブラリをヘビィにしてPython化するしか生き残りの道はない
584デフォルトの名無しさん
2018/06/27(水) 14:44:28.75ID:rnjnLILH
同意だ。Turtle使ってシェバンにstackコマンドライン書いて、
Haskellでシェルスクリプトするというのがあったが正気の沙汰とは思えない。
585デフォルトの名無しさん
2018/06/27(水) 19:48:00.92ID:luhHLeJ1
むしろ今はコンパイル全盛期でしょ
rubyとか下火だし
586デフォルトの名無しさん
2018/06/27(水) 22:56:56.37ID:kWgGKFVN
どれだけ簡潔に記述出来ても
短いプログラムでは実行するまでの手間の割合が大きくなるから
pythonでいいやってなる
587デフォルトの名無しさん
2018/06/28(木) 05:41:11.51ID:F07eHa3U
対話環境使わんの?短いプログラムてのがどんな状況か知らんからなんとも。
588デフォルトの名無しさん
2018/06/28(木) 07:28:52.90ID:BPlVOF4a
Haskellで簡潔に書けるという特殊能力を持っておきながら
破壊的で動的型付けな言語を選ばなければいけないという悲劇
589デフォルトの名無しさん
2018/06/28(木) 15:27:57.03ID:5C2saF7L
なんで宗教みたいに二者択一になるの
要所要所で使い分ければいいだけでしょ
590デフォルトの名無しさん
2018/06/28(木) 16:47:06.64ID:aKd05JxM
たかだか数秒のことで簡潔さを失いたいとは思わないね
591デフォルトの名無しさん
2018/06/28(木) 16:57:33.76ID:rY43/kt0
バンパターンとかseqとか使いまくるからあんま簡潔に書けないわ
592デフォルトの名無しさん
2018/06/28(木) 17:36:24.62ID:kdV1Odt0
簡単なプログラムだと
このifでこれとこれ書き換えてさらにネストしたifでこれとこれを書き換えて
とかやっちゃうな
haskellでもStateモナドとか使えばいいんだろうけど
593デフォルトの名無しさん
2018/06/28(木) 18:02:30.70ID:rjCVmVg9
文字列を直接操作したければ動的型でいい
直接操作することなくShowとReadで処理できるならHaskellの型は無駄ではない
594デフォルトの名無しさん
2018/06/28(木) 20:20:52.20ID:8bPXL4i4
より真理に近い言語以外使いたくないのだ
595デフォルトの名無しさん
2018/06/28(木) 20:47:06.63ID:5C2saF7L
込み入った評価戦略で脳ミソ使わされるのが真理とも思えんがw
596デフォルトの名無しさん
2018/06/28(木) 20:59:45.19ID:rY43/kt0
量子コンピュータが実用化されればへーきへーき
597デフォルトの名無しさん
2018/06/28(木) 22:01:03.00ID:GLp7lVXW
文字列入力を要求してその文字列を含むファイルを検索して見つかったらエディタで開く、
的な、コマンドラインからさっと使いたいので実行までが重いと困るけど、
cabalプロジェクトにする程のもんでもない規模のやつ
598デフォルトの名無しさん
2018/06/28(木) 22:04:23.65ID:GLp7lVXW
if ってあんま使ったことない。関数のガードとcase、あとData.Bool.bool
599デフォルトの名無しさん
2018/06/29(金) 18:53:31.79
Yesodって失敗したの?
600デフォルトの名無しさん
2018/07/02(月) 22:40:55.64ID:Q8zb4uVa
Haskellは"関数型だから"コードが短く生産性が高いと聞いたのに
関数型ではないPythonの方がコードが短く書けると知った時の絶望感
601デフォルトの名無しさん
2018/07/02(月) 22:42:40.97ID:zz3F/ohp
そうなのか?
602デフォルトの名無しさん
2018/07/03(火) 12:03:15.48ID:j/SH2c2P
関数型ではないHaskellがあるってことだろ
男の娘みたいなやつが
603デフォルトの名無しさん
2018/07/03(火) 12:11:44.26ID:jJAl/nPq
関数型こそ邪悪なシンタックスに頼らない無敵の流派なのだ
ただし両方使う方が強い
604デフォルトの名無しさん
2018/07/03(火) 12:22:05.97ID:vylnwloM
最強はF#で決まりがこのスレの結論です
605デフォルトの名無しさん
2018/07/03(火) 15:28:26.92ID:RDWAs26/0
バグバグしてていいならpythonの方が手っ取り早いでしょ
606デフォルトの名無しさん
2018/07/03(火) 19:37:38.72ID:h6TZWOAm
そのバグが出ない haskell で、まともなグラフ描けるライブラリ作ってくれよ
607デフォルトの名無しさん
2018/07/03(火) 20:25:29.91ID:k4izv0NM
そういう考え方の人はpythonの方がいいでしょ
住み分け住み分け
608デフォルトの名無しさん
2018/07/03(火) 20:42:26.69ID:kQlTmain
>>606
hackage にアップされているグラフ描画ライブラリの
まともではない点とその理由を列挙していただけないでしょうか。

来月ちょっと暇ができるので、ここで議論が深まれば、
列挙されたものの幾つかを改善してみようかと思います。
609デフォルトの名無しさん
2018/07/03(火) 22:20:48.11ID:UwUpR5rd
>>608
Haskell は調べかかってあきらめたからよく知らないんだが、Python ユーザの視点で書かせてくれ。

Python だとグラフ描くライブラリは、単純な(と言っても強力な)matplotlib って Matlab のパクリの他、
よりハイレベルなグラフが簡単に描けるライブラリとか、インタラクティブなグラフが描けるライブラリとかがある。
どれも、Jupyter ってWeb環境から普通に使えるし、データフレームって表みたいなデータ構造を入力に出来る。
データフレームはつまらないけど実用的には必須で、
カンマ区切りのテキストファイルとかエクセルとかデータベースを読み取れる。

Haskell ってそもそも標準的なデータフレームが無い気がするんだ。間違ってたらぜひ教えて欲しい。

あとオレが調べた時は単純にHaskell のグラフライブラリは見た目が古臭かった。gnuplot 並み。
最近だとPythonでもRでも、カッコいい色のセットとかを選べるし、複数のグラフを簡単にレイアウトできる。
頑張ればカッコよく描けるのかもしれないけど、そんなところに頑張りたくないんだ。
610デフォルトの名無しさん
2018/07/04(水) 03:12:38.67ID:kJrFfDeb0
じゃあグラフ描くならPythonってことでいいんじゃないですかね
611デフォルトの名無しさん
2018/07/04(水) 03:48:39.08ID:y2B7jfXw
すいません。ハマってしまってます。助けてください。
GHC 7.8.3です。
有理数係数の複素数の計算をしようとして
import Data.Ratio
import Data.Complex
として
Prelude Data.Ratio Data.Complex> ((0%1):+(1%1))^2
としたら

<interactive>:5:1:
No instance for (RealFloat (Ratio a0)) arising from a use of ‘it’
In a stmt of an interactive GHCi command: print it

と駄目みたいです。
何がだめなのかさっぱりわかりません。
どなたか解決策わかりますか?
612デフォルトの名無しさん
2018/07/04(水) 06:46:15.75ID:We7MgVDS
>>609
matplotlibやpandasあたりは、
そのためだけに、Python使うくらいのライブラリだから、
他の言語に使いたいライブラリがあれば、
その言語を使うで使い分けで良いんじゃない。
Excelの読み書きもなんかもPython使ってるよ。
613デフォルトの名無しさん
2018/07/04(水) 07:58:03.61ID:RQ3++Y83
HaskellのシンタックスのPythonが欲しい
614デフォルトの名無しさん
2018/07/04(水) 09:21:13.05ID:NlExtjkH
>>611
HaskellのComplexで四則演算などをしようとすると
各要素はRealFloatクラスのインスタンス (いわゆる浮動小数点数)である必要がある
Ratio a はRealFloatのインスタンスになれないので計算できない
こうなってる理由はざっくり言えばHaskellのNumが悪い
(参考: https://blog.miz-ar.info/2016/06/haskell-num-class/#abs_signum )
615デフォルトの名無しさん
2018/07/04(水) 11:08:34.25ID:y2B7jfXw
>>614
ありがとうございます。
Ratio a 割り算できるのに駄目なんですね。
別法考えます。
616デフォルトの名無しさん
2018/07/04(水) 11:21:15.35ID:rsOJUgV3
>>609
例えば QuickPlot (https://github.com/sheegl/QuickPlot)
そこそこモダンな描画を行うライブラリでしたが、
README.md にあるとおり、もうメンテナンスは行われていません。
ビジュアライゼーションサーバーのクライアントを作る方がより効率的だから、だそうです。

私もそう思います。
haskell でグラフ描画ライブラリを作るなら、
・データの作成 (取得や加工、整形など)
・サーバーへアクセスするためのインターフェース
この2点の実装に絞りたいですね。

データの作成は、python では Pandas のデータフレームを挙げていますが、
haskell ではこんなのはどうでしょうか。
https://github.com/chrisdone/labels/tree/master/labels-explore

あと、gnuplot を卑下してるようですが、そんなにダメですか?
私には視認性の良いグラフに見えますけど。
Wikipedia のグラフにも使われていますし。
617デフォルトの名無しさん
2018/07/04(水) 14:52:23.98ID:okkM4kUQ
gnuplot も悪いとまでは言わないが、昔の解像度が低く色数もあまりなかった時代に最適化されてる気がするんだよ
Python のグラフと、微妙に用途が違うのかもしれないが

Python のグラフ
https://seaborn.pydata.org/examples/index.html
618デフォルトの名無しさん
2018/07/04(水) 16:23:51.06ID:rsOJUgV3
>>617
すいません、違いがよくまかりません。

gnuplot デモ
http://gnuplot.info/demos/

私には低解像度&少色数時代の環境に最適化されているようにはどうしても見えないです。
619デフォルトの名無しさん
2018/07/04(水) 19:14:51.99ID:J/c/gMh10
会社のプレゼンに使うならPythonの例の方がオシャレに見える
しかしオシャレなグラフというのは見栄え以外の面では役に立たない
620デフォルトの名無しさん
2018/07/04(水) 21:47:59.97ID:gFgZc5FG
MY6
621デフォルトの名無しさん
2018/07/05(木) 02:06:23.28ID:4KPVS4+Q
その無駄に思えるオシャレが大事なんだぜ
622デフォルトの名無しさん
2018/07/05(木) 06:27:20.02ID:fgqUaerO
Pythonの例として上げられてるのは、seabornという
1. Rからデザインと
2. 人気のあるデータ表示方法
をパクって、同じことをmatplotlib.pyplotを裏で使ってお手軽にできるようにしたパッケージであって、
素のmatplotlib.pyplotのグラフはgnuplotのデフォルトと変わりのない見た目ですよ

gnuplotだって、山ほど表示用オプションがあって綺麗に表示できます
623デフォルトの名無しさん
2018/07/05(木) 09:04:27.74ID:HeNpkv8u
>>622
gnuplot でお手軽に綺麗に表示できるようになってるの?

話が逸れたが、ある程度データ構造が共通に使えて
目的に応じて使えるかなり機能も見た目も
良くできたグラフライブラリが幾つかある、ってのが Python の状況だよ
個人的にはHaskell でそれが出来りゃ嬉しいが、、
Python は実行しないとエラーが出ないから、げんなりする時もある

教えてもらった labels- explorer は面白そうなんで見てみるよ
624デフォルトの名無しさん
2018/07/05(木) 12:35:27.07ID:aP+h4Ji7
>>623
綺麗にできるかどうかは使用者のセンスに依ると思います。
python の方のサンプルは、単に淡い色を使い、
線を太めに表示しているだけに見えますが、違いますか?
他に python のグラフならではの特徴があれば言ってください。

下記のような設計のライブラリがあればあなたの要望は満たされますか?

1. 見た目が python のサンプルの様になる「デザインのプリセット」がある。

2. pandas のデータフレームに似た使い勝手の「2次元の表」からグラフを生成できる。

3. 上記1. 2. を満たせば、グラフの生成自体は gnuplot に任せても良い。
625デフォルトの名無しさん
2018/07/05(木) 18:25:11.62ID:rB4OVQ4f
一見丁寧に見えてなかなかに辛辣でワロた。
626デフォルトの名無しさん
2018/07/05(木) 18:32:51.78ID:Ia+ptacm
そんなところ頑張りたくないからデフォルトで一般受けする図を出せる奴が欲しいってだけの議論でなんでこんな白熱するんだ
627デフォルトの名無しさん
2018/07/05(木) 18:54:20.69ID:rB4OVQ4f
>>626
Pythonユーザーの視点、て一言がたぶん余計だったと見受けられる。

Haskellな人、でググると逆の気持ちが分かるかと。
628デフォルトの名無しさん
2018/07/05(木) 21:16:31.45ID:aP+h4Ji7
勘違いしているようですが、python 視点とかはどうでもいいです。
要は、希望されている機能がどれだけ楽に実装できるかが問題なんです。

その「頑張りたくないからデフォルトで」がプリセットの提供で満たせ、
かつ gnuplot を使ってもいいのなら、
見た目の部分は頭をそれほど使わず実装できそうです。

また、データフレーム的なデータ構造も、
もうメンテされてなさそうですが、labels-explore で賄えます。

となれば、ライブラリの形はインターフェースを簡易化したラッパー的なもので十分。

一から作るより遙かに楽です。

でも、私の指摘の他に python のグラフならではの特徴があり、
それを求められているのであれば、実装が難しくなり、
正直腰が引けます。
そのための確認です。
629デフォルトの名無しさん
2018/07/05(木) 21:59:46.30ID:LtuS5J6M
普通にいける範囲なら実装してくれるってこと……?
神かよ
630デフォルトの名無しさん
2018/07/05(木) 22:39:32.46ID:JLdZJLqI
Pythonならでは、って訳じゃないが(むしろ Rのパクリだと思うが)
facet とかいうグラフを二次元の表に並べたオシャレなグラフは欲しい
軸はグラフ毎に共通にできたりバラバラにできたりする
seaborn の facetgrid ってクラス見てくれ、map でグラフ書いたりしてて、ちょっと関数型言語の影響がありそうだから

あとは逆にHaskell ならではの良さが出るかどうかだな
631デフォルトの名無しさん
2018/07/05(木) 23:17:35.48ID:mFkifadT
> Haskellならではの良さ
フーム
632デフォルトの名無しさん
2018/07/05(木) 23:22:55.84ID:aP+h4Ji7
>>630
複数のグラフを並べるのは、gnuplot では、このサンプルの一番下のものですね。
http://gnuplot.sourceforge.net/demo_5.0/layout.html

すみませんが、python 自体は昔に少し触ったくらいで殆ど門外漢です。
不慣れなものを調べるのは面倒で、そこまで労力や時間をかけたくないです。
あくまで、暇ができるのでやってみましょうか、という話です。

なので、実装してほしい事は自分の口で、
python を知らない者にも分かるように説明してください。
それでも、あまりに大変そうならお断りするかも知れませんが。

あと何度も言いますが、オシャレなグラフになるかどうかは個人のセンスですので、
そんなものはライブラリに期待しないでください。
ある程度のプリセットは用意しようと思いますが、あくまで私のセンスです。
普通は利用者がパラメーターを調整して自分でオシャレに仕上げるものです。
633デフォルトの名無しさん
2018/07/06(金) 00:29:48.55ID:qcgYo1MM
それはいけない。
現にSeaborneはおしゃれに仕上げて来ているので、Pythonならライブラリに期待できるのにHaskellでは期待出来ないということになってしまう
634デフォルトの名無しさん
2018/07/06(金) 01:50:57.76ID:nHf3/Uiq
>>633
プログラミング言語を用いてグラフを作る目的は、
データの取得、加工、整形までをサクッとプログラムしたのだから、
そのデータの全体像を捉えるための可視化も「ついでに」してしまおうというもの。

つまり、プロセッシングしたデータの特徴を「すぐに見たい」という要求に応えるもの。

その様な目的のグラフに求めるのは、データの様相を正しく映すこと。
オシャレなんて入る余地は微塵もありません。
(例えば haskell には使用メモリ量をプロファイルしたデータのグラフ化ツールがありますが、
そのグラフにオシャレさは必要でしょうか)

もし、人にカッコイい思われるグラフを作りたいとか、
人にインパクトを与えるグラフを作りたいという目的ならば、
なにもプログラミング言語を使わなくてもいい。

というのが、古臭いかもしれませんが、私の考えです。

なので、あくまでオシャレなグラフを作るライブラリを求めているのでしたら、
私のモチベーションは大きく下がるので、
この件から降ります。
635デフォルトの名無しさん
2018/07/06(金) 02:04:10.34ID:qcgYo1MM
>>634
そういう考えなら降りた方が良いと思うよ
636デフォルトの名無しさん
2018/07/06(金) 05:21:13.62
なんでオシャレにしないといけないんですか(正論)
637デフォルトの名無しさん
2018/07/06(金) 06:38:28.09ID:hZ+CPQ2X
自己肯定感かな
論理に自信があるなら論理だけでいいがそうでなければオシャレが必要なような気がする
638デフォルトの名無しさん
2018/07/06(金) 06:41:34.00ID:2hmUlp+S
何がオシャレなのかを定義して
正確に人に伝えるところからじゃないの?
639デフォルトの名無しさん
2018/07/06(金) 07:12:51.82ID:hZ+CPQ2X
もし定義できないならできないと伝えるのが正しい言葉なんです
640デフォルトの名無しさん
2018/07/06(金) 07:46:50.10ID:vkH0MZEq
ユーザーは最初から見た目を重視してんのに、ここにきていきなりオシャレは必要ないって突っ返すのは、
さすがにPythonがどうとかHaskellがどう以前にコミュニケーション不全
641デフォルトの名無しさん
2018/07/06(金) 08:37:44.78ID:ODtONBJi
万能なプリセットなんておれは期待してないから、
適当なのを真似るだけで全然問題ないよ
ただ別に金出してるわけでもないから、おれは好き勝手書いてるけど別に従う必要はないよ

あとちょっとグラフに対するおれの感覚と違っているようだから書いておく

少なくとも今は、一種類のデータだけじゃなく、沢山の種類のデータを見たい人がいるんだよ。
そういう人にとっては、情報は圧縮されていて欲しい。忙しいから、全体を見たいんだ。
例えば一台の使用メモリ量じゃなく50台のを見たい、とかだよ。
そんな時に、50枚のグラフを渡されて一個一個が完璧に可視化しているでしょ、とか言われたら困る。

画面に収まるようにするには、削ってもいい情報を削り、例えばfacetみたいな方法でまとめるしかない。
かといって圧縮しすぎても分からなくなるし難しいけどね。
642デフォルトの名無しさん
2018/07/06(金) 10:10:20.21ID:nHf3/Uiq
>>641
> 画面に収まるようにするには、削ってもいい情報を削り、例えばfacetみたいな方法でまとめるしかない。
> かといって圧縮しすぎても分からなくなるし難しいけどね。

私は「全体像」を捉えるための可視化と言っています。
細部を見るための可視化とは言っていません。
(50個分のグラフで表されるデータの全体像を捕らえたいという要望に、
50枚のグラフを作るなど愚の骨頂)

そして、それはあなたがオシャレではないと感じている gnuplot でできますよね。
gnuplot のサンプル見ましたか?

gnuplot でもできることは理解したけど、
オシャレではないので却下という事ですか?
643デフォルトの名無しさん
2018/07/06(金) 11:23:26.70
長い棒グラフを端折る為に、下端を0以外の数値にしちゃうとか、マナー違反しない限りもう好きにやってくれ
644デフォルトの名無しさん
2018/07/06(金) 11:46:42.42ID:aeaUac9w
オシャレって結局UXだからね
手軽に良いUXが得られる方を使うのは自然っちゃ自然なわけで
645デフォルトの名無しさん
2018/07/06(金) 14:15:19.37ID:hZ+CPQ2X
UXを定義できないなら予測もできない
予測できると思ってるならやっぱり定義するべき
646デフォルトの名無しさん
2018/07/06(金) 18:44:45.57ID:aeaUac9w
UX自体の定義は単純だよね
プロダクトによってユーザーが得る経験
良し悪しになると一意には定まらないけど良い悪いのアンケでも取って統計的有意差を得られれば良い悪いとしていいと思う

もし客観主義として定義可能なものしか定義と認めないと言うならお手上げだ
良いUXが得られるとされるプロセスには既にアンケなどによるユーザ要求の明確化が含まれてしまうからね
647デフォルトの名無しさん
2018/07/07(土) 09:26:18.48ID:IVdrrdB1
アンケ取って結果を発表するところまで全部がUXになるからお手上げだな
放○線を測定して数値を報道するみたいなUXだ
648デフォルトの名無しさん
2018/07/07(土) 11:29:34.03ID:o7Nl1O6h
出来ない出来ないと言い訳ばかりして実際出来ているPythonから目をそらす
649デフォルトの名無しさん
2018/07/07(土) 11:58:08.73ID:IVdrrdB1
プロシュー○「出来る…そんな言葉は使う必要がねーんだ。」
650デフォルトの名無しさん
2018/07/07(土) 12:00:36.05
たかがグラフ一つでいつまでもスレを汚さないで
もっと本格的な話をして
651デフォルトの名無しさん
2018/07/07(土) 21:46:46.78ID:amcAQv9O
質問

let a = takeWhile p $ sort xs
これって、どこまでソート処理されるかは、
xs の並び方と条件 p によるよね
(厳密にはaの評価方法によるけど)

今のsortの実装は確かマージソートだったはずだから、
極端な話、条件に合う要素がただ一つだけ先頭にあれば、
ソート処理はすぐに終わると思っていい?
652デフォルトの名無しさん
2018/07/07(土) 23:14:16.03ID:CxD5piUN
>>651
そういう意図なら
sort $ takeWhile p xs
じゃないかな
最初に書いてある式だと、takeWhile p が引数のリストを評価しようとしたときに
sort xsの第一要素を見る必要があるのでxsをソートし終わらないと評価が進まないはず
653デフォルトの名無しさん
2018/07/08(日) 00:09:13.07ID:Xnl3te8c
マージソートでマージが遅延されるならhead $ sort xsはO(n)だと思う
いい感じの説明用コードが思いつかないけど
あとたぶん例のクイックソートも
654デフォルトの名無しさん
2018/07/08(日) 00:15:59.84ID:Xnl3te8c
あークイックソートは先頭だけでも最悪O(n^2)になったりするか
655デフォルトの名無しさん
2018/07/08(日) 01:32:29.33ID:fmVgo5Ue
>>652
オレ >>651

つまりはn要素のリストのsort後の先頭m要素 (m<n) を評価するのは、
n要素を評価するより少ない計算量で済むんじゃないか、という質問なんだ

だから sort と takeWhile を入れ替えたら意味ない
656デフォルトの名無しさん
2018/07/08(日) 01:40:40.69ID:fmVgo5Ue
ふと思いついたが、比較関数に unsafePerformIO を入れて比較回数をカウントすれば分かるかも

今は実験環境が無いから、起きたら試してみる
お騒がせしてごめん、という結果になるかも

お休み、お前ら
657デフォルトの名無しさん
2018/07/08(日) 09:12:56.04ID:fmVgo5Ue
実験したら、やっぱり評価に必要な部分しかソートされなかったよ
実験は takeWhile じゃなく take でやった

[実験コード]
ucomp :: IORef Int -> Int -> Int -> Ordering
ucomp ref x y = unsafePerformIO $ do
modifyIORef ref (+1)
return $ compare x y

main = do
let g = mkStdGen 1
let xs = shuffle' [1..8] 8 g
rc <- newIORef 0
let ys = take 8 $ sortBy (ucomp rc) xs
putStrLn $ show $ maximum ys
c <- readIORef rc
putStrLn $ show c

take で取り出す要素数を8個と3個で実験し、show c の結果を比較
  8個 c=19
3個 c=14

やっぱ遅延評価ってイイね
ベスト3を決めるのに他言語みたいに全部を評価する必要がない

ちなみに、100万個の要素でもやってみた
  all c=19237801
  3個 c=1413225

質問したけど、ひとりで納得してしまった、すまん
658デフォルトの名無しさん
2018/07/08(日) 09:49:58.54ID:ZNji3Zip
>>657
>ベスト3を決めるのに他言語みたいに全部を評価する必要がない
別に他言語でも全部を評価する必要はない。
https://ja.wikipedia.org/wiki/%E9%81%B8%E6%8A%9E%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
659デフォルトの名無しさん
2018/07/08(日) 10:45:22.88ID:JJmFxw3L
どんな言語だろうが全部ソートすれば O(n*log(n)) で最小値や最大値を探すのは O(n)

この n と n*log(n) の差を無視できないなら
そもそも n と 100*n の差を無視するのもダメじゃないかと思う
660デフォルトの名無しさん
2018/07/08(日) 11:20:47.41ID:fmVgo5Ue
>>658
いや、そうじゃなくてさ

上位m個の選択処理とソート処理とをソース上ではきっちり分けてるじゃん
ソースを読む人間にとってはすげー読みやすいわけよ

なのに内部処理的には2つが連携して、
必要なところまでしかソートされないだろ
選択処理のためにワザワザ特殊なソート処理をしなくてもさ

そこがすげーって感動してるんだよ
661デフォルトの名無しさん
2018/07/08(日) 11:30:44.71ID:Xnl3te8c
まあソートなんて如何にもキャッシュ次第なアルゴリズムで
連結リストと遅延評価のO(N)が配列と正格評価のO(NlogN)に
現実的なNの範囲で勝てるのかものかどうか・・・
662デフォルトの名無しさん
2018/07/08(日) 13:00:05.06ID:MJ8iSrG7
まるで永久機関の話を見ているようだ
663デフォルトの名無しさん
2018/07/08(日) 22:57:14.98ID:wt6yCeB5
具体例や比喩で抽象度を下げるのは良い
だが「永久機関っぽいもの」の集合を作ったらむしろ抽象度が上がり収拾がつかなくなる
664デフォルトの名無しさん
2018/07/09(月) 10:04:31.05ID:pOD9hGUD
arrayパッケージのData.Array.(!)はO(1)ですか。
665デフォルトの名無しさん
2018/07/11(水) 00:08:42.37ID:l1CMhfek
Haskellの採用とユーザ満足度が向上
https://www.infoq.com/jp/news/2018/07/haskell-user-survey-2018
666デフォルトの名無しさん
2018/07/13(金) 00:35:06.69ID:vrIUPTb8
発展編! Haskellで「型」のポテンシャルを最大限に引き出すには?【第二言語としてのHaskell】
https://employment.en-japan.com/engineerhub/entry/2017/10/03/110000
667デフォルトの名無しさん
2018/07/14(土) 09:44:23.46ID:sMbeASmt
yampaムズ過ぎ

初心者用のシンプルで教育的なチュートリアルって無いの?
英語でもいいから教えて
668デフォルトの名無しさん
2018/07/15(日) 00:11:52.51ID:89Btz4it
>>677
Yampaエアプだが、このサイトが良さそうだ
http://bitterharvest.hatenablog.com/archive/category/Haskellプログラミング講座(上級編:ゲーム)
669デフォルトの名無しさん
2018/07/15(日) 05:50:15.76ID:uHtx5/Ti
>>668
申し訳ない

そこは、FRPの基礎概念である「ビヘイビアとイベント」と、
Yampaの基礎概念である「シグナル関数」との繋がりが言葉で説明されていないんだ

コードを書きまくって慣れろ、って感じ
670デフォルトの名無しさん
2018/07/15(日) 08:13:24.43ID:89Btz4it
>>669
フーム
ビヘイビアは Time → a でイベントは [ (Time, a) ]
シグナル関数は (Time → a) → (Time → b)
のようなことが 「FRPの話 - maoeのブログ」で少しだけ説明されているね。

もう少し長い解説をElm開発者の人が論文に書いてた。
http://elm-lang.cn/assets/papers/concurrent-frp.pdf
671デフォルトの名無しさん
2018/07/15(日) 08:23:05.35ID:89Btz4it
>>665 ほらね、Haskell普及のためにはツールの拡充が必要なんだよ。
https://github.com/alanz/vscode-hie-server/pull/83
これこれこういうのを待ってた。emacs対応はよ
672デフォルトの名無しさん
2018/07/15(日) 09:30:20.96ID:uHtx5/Ti
>>670
ありがとう
両方読んでみる
673デフォルトの名無しさん
2018/07/27(金) 11:27:32.40ID:qBTTu3Zk
importのhidingとかqualifiedとか適当にやってるせいで、いつも収拾がつかなくなってる。

ブラックリストかホワイトリストか、asで名前付けるのはどんな時か。みんなどうしてるの?
674デフォルトの名無しさん
2018/07/27(金) 21:52:57.03ID:lmpcLfYu
>>673
私も知りたいな。

私の場合は、頻繁に使うもの以外は、
qualified as してる。

そして、asでつける名前にいつも悩む。
675デフォルトの名無しさん
2018/07/29(日) 20:22:22.75ID:tC3jGbCj
インポートリストをざっと見ることで、モジュールの役目が何となく掴めて嬉しい。たとえば
import Data.Text.Lazy
import Text.Parsec
だったら、ああなんかをパーズするんだな、と分かる。

一方、
import Math (sin,cos,tan)
みたいになっていても、このモジュールは三角関数を使うやつ、ということは判るが、それが大して役に立つとは思えない。

だから値の明示的インポートはやめて、hidingだけに統一しようかな、と考えてる。
値がバッティングして、かつ両方使いたいならそのモジュールは qualified する。
676デフォルトの名無しさん
2018/07/29(日) 20:25:02.63ID:tC3jGbCj
>>674
基本大文字を拾って as している。
import qualified Data.Map as M
import qualified Data.Set as S
だが
import qualified Text.Regex.TDFA as TDFA
つらい
677デフォルトの名無しさん
2018/07/31(火) 21:58:40.13ID:6DhCQI2V
https://github.com/trekhleb/javascript-algorithms/issues/119

岡部健、更新。
678デフォルトの名無しさん
2018/08/11(土) 12:54:39.21ID:dGCQYNDS
get programming with haskell 読み終わった。
679デフォルトの名無しさん
2018/08/12(日) 03:22:15.33ID:fh95vopi
>>678
感想は?
680デフォルトの名無しさん
2018/08/12(日) 09:41:11.96ID:mCQrOvpG
>>678
凄いハスケルより初心者向きで実用的でわかりやすい。
681デフォルトの名無しさん
2018/08/12(日) 11:23:29.51ID:1lJIW3H3
>>680
実用的というのは?
何かアプリケーションを作るの?
682デフォルトの名無しさん
2018/08/12(日) 11:30:59.98ID:mCQrOvpG
>>681
アプリケーションは作らないけれどコマンドラインのプログラムは作る。
683デフォルトの名無しさん
2018/08/12(日) 17:25:24.07ID:1lJIW3H3
もしかしてFRPとマルチスレッドって相性悪い?
684デフォルトの名無しさん
2018/08/12(日) 18:12:55.83ID:HMPSYWub
新分子設計は並列処理を酷使するだろうが
強化プラスチックが特別どうということはないだろう
685デフォルトの名無しさん
2018/08/12(日) 18:50:22.57ID:RPd+D2gX
>>684
FRPの有限要素解析?
686デフォルトの名無しさん
2018/08/12(日) 19:11:53.89ID:OVUWpXpl
>>26
687デフォルトの名無しさん
2018/08/13(月) 06:20:04.15ID:HYnqBmQs
いいねえ。気軽に使えるからコマンドラインは好き。
自分で使うツールを作るのが一番モチベ上がるね
688デフォルトの名無しさん
2018/08/13(月) 14:03:54.60ID:DTF7R3qv
Get Programming with Haskellはタイトルのとおり初心者向けの本だよ
600ページの本で400ページ超えたところでstack導入して、
あとは、簡単なコマンドラインツール、http、JSON、dbおさわりくらい
それまでは、ghci使ってhaskellの学習
689デフォルトの名無しさん
2018/08/26(日) 22:17:17.61ID:hKYk5Tea
Haskell開発ワークフロー。お前らはどれ?
1. stackの--file-watch
2. ghciの:r
3. ghcid
4. エディタのフック
https://www.fpcomplete.com/blog/2018/08/haskell-development-workflows-4-ways
690デフォルトの名無しさん
2018/08/27(月) 22:15:37.17ID:8S3lymML
今やすいぞ 多分半額程度

ソフトウェアシステムアーキテクチャ構築の原理 第2版
https://www.amazon.co.jp/ソフトウェアシステムアーキテクチャ構築の原理-第2版-ニック-ロザンスキ-ebook/dp/B00ZF44J0I/ref=tmm_kin_title_0?_encoding=UTF8&qid=1535375513&sr=1-1
691デフォルトの名無しさん
2018/08/29(水) 13:20:47.63ID:nTrDfIjn
>>689
俺は2
692デフォルトの名無しさん
2018/09/04(火) 09:34:44.70ID:0nZVvdsT
カリー化された関数の表記がよく分かりません。

add' :: Int -> (Int -> Int)
add' x y = x + y

↑これはどうやって解釈すればいいのでしょうか?
add' は関数を返す関数であるにもかかわらず、 = x + y となっているので数を返す関数のように見えます。

↓このλ式を使った表記は何の問題もないと思います。

add = \x -> (\y -> x + y)
693デフォルトの名無しさん
2018/09/04(火) 09:40:03.69ID:0nZVvdsT
add x = \y -> x + y

これでも問題ないと思います。
694デフォルトの名無しさん
2018/09/04(火) 10:34:46.73ID:ntR3woJY
Int -> (Int -> Int) も
Int -> Int -> Int も同じやろ

add 1 2 としたらIntになるし
add 1 としたらInt -> Intの関数が得られる
それだけ

更に引数3つとるaddなら
add = \x -> (\y -> (\z -> x + y + z))
と同じ意味だし、haskellはデフォでそういう仕組になってるってことやろ
695デフォルトの名無しさん
2018/09/04(火) 10:40:17.26ID:0nZVvdsT
>>694

ありがとうございます。

add' :: Int -> (Int -> Int)
add' x y = x + y

↑この表記って、よくない表記じゃないですか?

add' x y = x + y

↑これをみて、型が add' :: Int -> (Int -> Int) だとはとても分かりません。
696デフォルトの名無しさん
2018/09/04(火) 10:48:31.75ID:W1MTXd47
じゃあどんな型だと思うんだい?
697デフォルトの名無しさん
2018/09/04(火) 10:48:48.98ID:ntR3woJY
逆にそれ見たらどういう型だと思った?
Int -> Int -> Int
って思ったんじゃない?

なんの本読んでるかしらんけど
例えば add x y z なら Int -> Int -> Int -> Int だけど
実際には
Int -> (Int -> (Int -> Int))
こうなってるってことを言いたいんやろ
698デフォルトの名無しさん
2018/09/04(火) 10:50:47.26ID:0nZVvdsT
>>696

add' :: Int Int -> Int

という型に見えます。
699デフォルトの名無しさん
2018/09/04(火) 10:52:13.57ID:0nZVvdsT
1 2

のように整数をスペース区切りで二つ並べたものに対して、

1 + 2

を対応させる関数に見えます。
700デフォルトの名無しさん
2018/09/04(火) 10:54:55.24ID:0nZVvdsT
関数を返す関数なんですから、

=

の右には数ではなく関数を書くべきです。
701デフォルトの名無しさん
2018/09/04(火) 10:57:59.07ID:0nZVvdsT
f x = x + 2

などの例を見て、

f ● = ■

という表記は、

f(●) = ■

という意味かと思います。
702デフォルトの名無しさん
2018/09/04(火) 11:29:45.35ID:ntR3woJY
add は関数を返す関数じゃなくて引数を2つとって値を返す関数やろ
そこでもう勘違いしとる
add 2 3 の結果は関数じゃなくて値やろ?
add 2 のように引数を一個だけ渡したら部分適用されて引数を一個とる関数が返るってだけや

haskellはそういう部分適用できる関数を書きやすいように
add x y = x + y を add = \x -> (\y -> x + y)に自動で変換してくれるってだけ
糖衣構文ってやつ
嫌なら全部ラムダ式で書けばいいよ
703デフォルトの名無しさん
2018/09/04(火) 11:41:42.58ID:W1MTXd47
>>698
じゃああなたが今勉強してるカリー化って何なんですかね?
704デフォルトの名無しさん
2018/09/04(火) 12:05:07.87ID:/45N32wx
**argv :: char
*argv :: char*
argv :: char**

add' x y :: Int
add' x :: a -> Int
add' :: b -> a -> Int

C言語を学習した人はHaskellも分かる
これが知能だ
705デフォルトの名無しさん
2018/09/04(火) 12:52:41.14ID:JkSql3w1
Haxe では関数の型は、
function sum (a:Int, b:Int) : Int

Int -> Int -> Int
引数1 -> 引数2 -> 戻り値

最後は戻り値
706デフォルトの名無しさん
2018/09/04(火) 12:54:41.46ID:tHCjwI0T
>>701
Haskellは関数適用が最優先だから
add' x y は (add' x) y って意味
だから add' x y = x + y は
「add' にxを適用した結果にyを適用した結果はx+yに等しい」と読める

ちなみに組み込み関数のuncurryを用いて add'' = uncurry add' とでも定義すると
add'' :: (Int, Int) -> Int
というおそらく>>698 でイメージしているであろうものに近い関数が得られる
Haskellのデフォルトの振る舞いはこちらではないという話
707デフォルトの名無しさん
2018/09/04(火) 14:03:08.32ID:TMcC/EnP
通りすがりだけど勉強になった
haskell面白そうだな
708デフォルトの名無しさん
2018/09/04(火) 20:06:44.00ID:f+p4hPZb
Haskellちょっといじってると楽しいけどこれで飯食うのは自分には絶対無理という確信がある
709デフォルトの名無しさん
2018/09/04(火) 20:32:29.35ID:kOsSso2/
Haskellで食っていきたい
710デフォルトの名無しさん
2018/09/04(火) 21:00:34.43ID:jmLwKshs
Haskell丼食いたい
711デフォルトの名無しさん
2018/09/05(水) 02:13:16.34ID:sfHxtAx4
市場を作れ
712デフォルトの名無しさん
2018/09/05(水) 02:29:20.15ID:XBVLJBKG
まずはHaskellの独壇場となるニッチ市場を開拓しないとな
どこかある?
713デフォルトの名無しさん
2018/09/05(水) 02:54:04.71ID:MYQmiXId
写像をドメイン、コドメインのみ与えて定義するのが簡単にできればちょっと優位にたてる分野はある
714デフォルトの名無しさん
2018/09/05(水) 17:02:07.24ID:7oDYcpPT
>>713
もう少し詳しく教えて
715デフォルトの名無しさん
2018/09/05(水) 17:04:52.63ID:7oDYcpPT
いまのHaskellには何が足らないのか。どんな分野で強みが活きるのか
716デフォルトの名無しさん
2018/09/05(水) 20:52:06.57ID:4jTvsEmq
haskellでddd, cqrs, esのやり方を教えろください
717デフォルトの名無しさん
2018/09/07(金) 12:23:22.72ID:bXCAi+24
DDDが活きてくる(と見込める)ほどの規模の案件をhaskellで組むプロジェクトって凄いな

本格的にhaskellを導入してるんだね
718デフォルトの名無しさん
2018/09/07(金) 18:05:22.36ID:jiol9czZ
>>716
cqrs haskell でググるとすぐに
https://github.com/BardurArantsson/cqrs
がヒットするが、これではダメなん?
719デフォルトの名無しさん
2018/09/07(金) 19:04:41.60ID:2UbG8YkS
>>718
DDD は Extensible Effect と Tagless final がよく合う
720デフォルトの名無しさん
2018/09/07(金) 23:54:56.71ID:2UbG8YkS
Haskellに欠けているのは中級者向けの書籍なのかも
721デフォルトの名無しさん
2018/09/08(土) 00:07:42.03ID:8HsWZyyw
コンセプトは無茶苦茶面白いのに、肝心の実装が学級的で好き放題に流動的で恐ろしく無責任だからでは
722デフォルトの名無しさん
2018/09/08(土) 13:16:38.32ID:kGQ5zdyq
>>721
そうなのか。具体的にはどのあたりが?
723デフォルトの名無しさん
2018/09/10(月) 20:55:39.03ID:Tuk3Smzo
Functional Design and Architecture
https://www.reddit.com/r/haskell/comments/6ck72h/functional_design_and_architecture/
素晴らしい、応援したい
724デフォルトの名無しさん
2018/09/11(火) 06:18:11.27ID:xFzcqeSI
発売されたら買おうかな
725デフォルトの名無しさん
2018/09/11(火) 20:55:06.43ID:GxY7LXz/
ひゃっほおおおう! ビルド通ったぜ
stackageの可能な限り全部の総計2352パッケージを含むプロジェクトのビルドがやっと通った。
もはや ghci をいったん落として stack.yaml と cabal ファイルにパッケージを追記し... などという面倒をしなくても
ただ import するだけでそれが利用可能になる。
726デフォルトの名無しさん
2018/09/15(土) 18:42:49.12ID:UVc1X0kV
spacemacsのinteroでデバッグできてる人います?

replを立ち上げた後、デバッグしようとする(spc m d d)と、
No Haskell session associated with this debug buffer.
てエラーが出て、先に進まないです。
上記はhaskell-debug.elの中に出てくるエラー文で、
上で立ち上げたrepl(stack ghci)がsessionとして認識されてないのが原因?な気がしますが、力及ばずって感じです。
727デフォルトの名無しさん
2018/09/16(日) 08:20:46.91ID:qJ8HI8bW
>>712
金融で使ってる。
あと文書解析。
728デフォルトの名無しさん
2018/09/16(日) 22:36:53.37ID:/Gv7qrCh
すみません言語の話題から少し外れますが、

Windows10環境で
WinGHCiコンソール(ver 1.0.6)を使っているのですが
表示フォントをコンソラス等にしても
滑らかな文字表示がされず
メモ帳エディタの様な細いジャギー文字表示になります。

何か環境を弄ったり外部設定ファイルを書き換えたりして
外国のユーザー画面みたいな滑らか文字表示にする方法を
もしご存知でしたら教えて下さい。
729デフォルトの名無しさん
2018/09/17(月) 17:50:28.07ID:tAsBi2aZ
ポールフダックの音楽/Haskellの本が延期しまくりでつらみ
慰めに手を出してみたreact+reduxが割と面白くてjavascriptおじさんになりそう
730デフォルトの名無しさん
2018/09/18(火) 15:50:49.67ID:zscrEVSG
ハスケルミュージックスクールってやつ
なら無料で読めるドラフトバージョンのやつよんだけど糞つまらんよ
ほとんどがライブラリーの使い方の説明しか書いてない
731デフォルトの名無しさん
2018/09/18(火) 23:03:29.52ID:5HE01N22
その本です
定価で買うような本じゃなさそうですね…
732デフォルトの名無しさん
2018/09/18(火) 23:04:16.22ID:5HE01N22
遅れましたがありがとう。
733デフォルトの名無しさん
2018/09/19(水) 23:56:22.00ID:Pb0Tb1M0
木構造を表現するときの、「節」とか「葉」って、どう読みますか?
734デフォルトの名無しさん
2018/09/20(木) 12:01:53.37ID:7WHuQIEO
ふし
よう
735デフォルトの名無しさん
2018/09/20(木) 12:32:11.09ID:pCCtAD0d
>>733
節 Node
葉 Leaf
736デフォルトの名無しさん
2018/09/20(木) 15:10:54.04ID:x+bQf+aM
木をきと読むのならふし、は、
木をもくと読むのならせつ、よう
になる
737デフォルトの名無しさん
2018/09/20(木) 19:43:33.25ID:lFTDGMpz
未評価オブジェクトの thunk の語源って何?
738デフォルトの名無しさん
2018/09/20(木) 20:48:30.00ID:xkI4bT5j
thunkって?
http://higepon.hatenablog.com/entry/20071202/1196605979
739デフォルトの名無しさん
2018/09/20(木) 21:06:35.17ID:mjuqlfQO
thunk you
740デフォルトの名無しさん
2018/09/20(木) 21:15:43.07ID:Qp++lnrA
>>738
あんがと
741デフォルトの名無しさん
2018/09/20(木) 22:10:00.23ID:mC+zbID1
カリー=ハワード同型
https://ideone.com/RSvVYo
742デフォルトの名無しさん
2018/09/20(木) 22:11:42.05ID:92zkwrbu
733です
ありがとうございます

「き」「…」「は」で、「節」の読みを決めかねていましたが、>>736さんの仰るとおり、「ふし」で行くことにします
743デフォルトの名無しさん
2018/09/20(木) 22:24:45.13ID:92zkwrbu
すみません、733です

音訓(違うかな?)いずれかに寄せるべきと感じていたからです

他の方々もありがとうございました
744デフォルトの名無しさん
2018/09/20(木) 22:59:01.96ID:O5Bw6BVk
>>743
グラフ理論だと、文献にもよるけど、道、路、小道、歩道とか出てきて、統一不能感。
745デフォルトの名無しさん
2018/09/21(金) 11:17:49.00ID:pJEikkxu
メモ化とスペースリークが本質的に同じもので、
言わば発酵と腐敗の関係の様なものだと知ったときは感動した。
746デフォルトの名無しさん
2018/09/21(金) 16:12:03.67ID:kcyxUCNO
例えw
747デフォルトの名無しさん
2018/09/22(土) 03:54:02.44ID:iTw0SS1T
>>744
path でええやん
748デフォルトの名無しさん
2018/09/22(土) 05:09:30.37ID:1NyjNSxI
>>747
元の英語がpath, trail, walkとか分かれてるのだが

文学なら訳し分けにくい概念は思い切って意訳することもできるが
技術用語だとそうもいかないのが難しいところ
749デフォルトの名無しさん
2018/09/23(日) 15:45:23.97ID:f8u3bg2b
Coerce知らなかった。newtypeを自動で剥がしてくれる便利なやつ

import Data.Semigroup
import Control.Arrow
import Data.Coerce
aggregate :: [Int] -> (Maybe Int,Int)
aggregate' :: [Int] -> (Maybe Int,Int)

aggregate = (fmap getMax *** getSum) . foldMap (Just . Max &&& Sum)
aggregate' = coerce . foldMap (Just . Max &&& Sum)

https://speakerdeck.com/konn/ben-dang-hasugoi-newtype
750デフォルトの名無しさん
2018/09/30(日) 08:19:13.93ID:0APHfRwQ
リストの要素がすべて異なる場合はTrue、
一つでも同じものがあれば False を返す関数を作りたい。

私が思いつく限りでは、次の方法が効率的には最適解だと思うのだが、どうだろうか。

リストが Eq と Ord のインスタンスであるという制限をかけた上で、
まずリストをソートし、それから隣の要素同士で同値関係を調べる。

ちなみに、これは○○問題などと名前がついているのだろうか。
751デフォルトの名無しさん
2018/09/30(日) 14:27:30.56ID:3FJv0aaM
名前をつけるとしたらグラフ○○かな
グラフ簡約のように木をグラフに変える問題
752デフォルトの名無しさん
2018/09/30(日) 14:28:16.49ID:fYmelBV3
なんでソートするん?
753デフォルトの名無しさん
2018/09/30(日) 14:56:02.92ID:HUnS5YBa
ソートは不要だし、どの言語でもdictionary/mappingにして要素数見るだけの作業のような
754デフォルトの名無しさん
2018/09/30(日) 15:13:03.29ID:0APHfRwQ
>>752
ソートすれば、隣同士の要素の同値関係を調べるだけでよくなるから。

n個の要素を持つ未ソートリストの場合、
リストの第0要素を第1要素と、第2要素と・・・第n要素と比較する。
次にリストの第1要素を第2要素と・・・第n要素と比較する。
とやって、結局 O(n^2) の計算量が必要になる。

ソートするなら O(n log n) で済む。

と思ったけど、オレ勘違いしてるかな。
すまん、修理に出したPCがまだ帰ってこず、
試して速度比較できる環境にないんだ。
755デフォルトの名無しさん
2018/09/30(日) 15:14:19.07ID:0APHfRwQ
>>750
それも結局 O(n log n) だよね?
これが効率的には限界?
756デフォルトの名無しさん
2018/09/30(日) 15:21:38.02ID:0APHfRwQ
>>755
アンカー間違えた。


>>753
それも結局 O(n log n) だよね?
これが効率的には限界?
757デフォルトの名無しさん
2018/09/30(日) 16:45:52.09ID:e88wFP8G
一般的に同値関係とは推移律が成り立ってる関係のことを言うので
全ての要素に対して先頭の要素と同値関係が成り立つのなら任意の要素間で同値関係が成り立つ
ちなみにソートして全探索を早く打ち切らせるテクニックのことは貪欲法という
758デフォルトの名無しさん
2018/09/30(日) 18:14:08.21ID:3FJv0aaM
dictionary云々はハッシュ関数で非可逆圧縮してからバケットソートするようなもの
バケットソートはO(n)
759デフォルトの名無しさん
2018/09/30(日) 19:44:34.07ID:0APHfRwQ
>>757
なるほど、推移律ね、失念してた。

>>758
バケットソートは分かるが、問題はどうやってハッシュ値を求めるかだよね。
難しそうだが、考えてみる。

みんなありがと。
760デフォルトの名無しさん
2018/10/02(火) 09:56:14.61ID:CXlZ46rN
Arch LinuxのHaskellのリポジトリが
1年間メンテされずに死んでいる状態なのを見ると
Haskellもいよいよ落ち目だなと感じる
761デフォルトの名無しさん
2018/10/02(火) 10:46:10.19ID:ckiYxteQ
よく知らないけど公式じゃあかんの?
762デフォルトの名無しさん
2018/10/02(火) 11:02:45.56ID:CXlZ46rN
そういう問題ではなく
向こうでHaskellへの関心が薄れているという事を言いたかった
メンテしていた人もHaskell離れしたかなとか想像できてしまう
763デフォルトの名無しさん
2018/10/02(火) 19:43:32.30ID:TcTkE961
本邦では昨年、Qiitaでのアドベントカレンダーは、HaskellがGoについで投稿数が多かった。
764デフォルトの名無しさん
2018/10/05(金) 01:51:04.61ID:kIWl5j53
入門記事を読んだ人が入門記事を書いての繰り返しですやん。
765デフォルトの名無しさん
2018/10/05(金) 02:04:05.24ID:vYMMhlcW
>>764
数えたがアドベントカレンダーに限ってはそういうのは10個くらいだった。
120程の記事のうちで
766デフォルトの名無しさん
2018/10/06(土) 18:21:22.11ID:nvkFLHfM
ネットでは大手のHaskell導入報告が続いて沸いてるとこだがお前らどんだけ情弱だよ
767デフォルトの名無しさん
2018/10/06(土) 18:23:45.87ID:FAIH8E2E
Haskell使ってはいけないような低学歴知恵遅れが
Haskellに興味をもってるからな

低学歴知恵遅れがHaskell触ってはいけない

ヤバイことがおきる
768デフォルトの名無しさん
2018/10/06(土) 18:45:45.19ID:iQB6eFVs
サイモンペイトンジョーンズがFacebookいってたけどさ、
バック→Haskell
フロント→React
みたいな構成ってそんなメジャーなんやろか
769デフォルトの名無しさん
2018/10/06(土) 20:53:46.19ID:py9kgJld
FacebookはちょっとしたツールをHaskellで作ってますよ、位だと思ってたが…

>>766
> 大手のHaskell導入報告が続いて沸いてる
気づかなかった。他にはどこが?
770デフォルトの名無しさん
2018/10/07(日) 02:27:45.21ID:cvc83VBz
ツイ見ろ
771デフォルトの名無しさん
2018/10/07(日) 08:23:56.85ID:VWepfHKo
誰の?
772デフォルトの名無しさん
2018/10/09(火) 07:56:37.24ID:pc4ijCgO
MonadIO は抽象度が高くて万能すぎ、オーバースペックだよ。
そのせいで、関数の中で何やってるのかシグネチャからは分かりにくいし。
ということで、もっと細かく分けようぜ、という話。
https://chrispenner.ca/posts/monadio-considered-harmful

簡潔で分かりやすい。
こういうのパターンっていうのかな。
773デフォルトの名無しさん
2018/10/09(火) 19:53:39.57ID:ikZDMvLJ
githubを見る限りではとても盛り上がっているとは・・・
https://github.com/trending?l=haskell
相変わらず○○をHaskellで書いてみました系のプログラムばかり
774デフォルトの名無しさん
2018/10/09(火) 22:29:07.16ID:1168jJnj
なんてことないfizzbuzzもHaskellで書くと楽しくなっちゃうんだよな
初めてプログラムを書いたときのwkwkを思い出させてくれる、それがHaskell
775デフォルトの名無しさん
2018/10/10(水) 00:27:00.44ID:mnDhwBuZ
Haskellでfizzbuzzをやろうとすると「数値か文字を出力する関数ってどうやるんだ?」
みたいなところでつまづきがち
776デフォルトの名無しさん
2018/10/10(水) 06:58:53.24ID:h0OQje2u
>>772
似たようなことはpurescriptではデフォルト(だった?)
777デフォルトの名無しさん
2018/10/10(水) 12:38:31.88ID:Gg6vIVej
数値を文字列型にすれば良い
778デフォルトの名無しさん
2018/10/11(木) 01:03:51.12ID:g6Q8mWEK
HaskellでのFIzzBuzzってこんなかんじですか?

https://csacademy.com/code/e8XJJZyv/
779デフォルトの名無しさん
2018/10/11(木) 12:44:03.11ID:kgTYxXGo
>>778
そこからガードとmapを覚えると、多分こんな感じ
https://csacademy.com/code/wAIR17mO/
780デフォルトの名無しさん
2018/10/11(木) 22:20:09.94ID:BadrZ8Hx
結局は書く人本人が気持ちよくなる為の言語だね
パフォーマンスに優れるとかもないし
781デフォルトの名無しさん
2018/10/12(金) 02:12:33.00ID:C3Ny8aXI
>>779
あーやっぱこれだね〜
782デフォルトの名無しさん
2018/10/12(金) 07:44:29.57ID:KfUOHFbE
遅延ストリームを扱うならHaskellは速い方だろう
fizzbuzzの規模じゃそれを採用する利点はわからないけど
783デフォルトの名無しさん
2018/10/12(金) 08:45:23.98ID:gMRT6HYK
むしろ最速の言語になってほしい。
「Haskellは参照透明性が保証されているために、最適化にアグレッシブになることができる。
そのため、高いコンポーザビリティによってコードは短くなるにもかかわらず、実行速度はあらゆる高級言語の中で最速である」
784デフォルトの名無しさん
2018/10/12(金) 19:09:14.98ID:dVwqKDFL
「Haskellは参照透明性を保証するために、最適化を犠牲にした。
そのため、高い冗長性によってコードは短くなるにもかかわらず、実行速度はあらゆる高級言語の中で鈍速である」
785デフォルトの名無しさん
2018/10/12(金) 20:38:19.51ID:P1gVq1Zk
purescriptってどうなん?
786デフォルトの名無しさん
2018/10/12(金) 20:52:35.33ID:gMRT6HYK
>>784
returnとpureのこと言ってんの?
returnとpureのこと言ってんのーーーーッ!!?
787デフォルトの名無しさん
2018/10/13(土) 06:54:47.20ID:KKBwY8Qn
コンパイラフレンドリーに記述したときの速度に概ね不満はないけどコードからパフォーマンスが予測しづらいのがね
そのコードにパフォーマンス上の問題がないか測定してみないとわからない
適切に最適化がかかるかとかスペースリークがないかとか
788デフォルトの名無しさん
2018/10/13(土) 07:37:36.01ID:dpKKSw3w
>>787
ベテランになれば実用上問題ない程度には予測できるようになるんじゃね?

俺はまだまだ修行不足だけど
789デフォルトの名無しさん
2018/10/13(土) 10:35:05.77ID:dM3fjinv
遅延評価だけでなくガベコレの遅さも問題視されるだろう(予測)
ガベコレやめてオブジェクトの寿命を予測できるレベルなら遅延評価も予測できそうだが
790デフォルトの名無しさん
2018/10/13(土) 18:49:50.11ID:hDWVpOOe
Haskellはコンパイルさえ通ればバグは滅多にないが通説になっているけど
実際に使うと想定していた100倍くらいメモリを使っていたりと
原因特定が面倒なミスは激減するという程でもないよね。
791デフォルトの名無しさん
2018/10/13(土) 20:07:33.53ID:H67rAYXW
メモリがないならディスクを使えばいいかもね
ファイルに保存できた方が原因特定も楽だし
792デフォルトの名無しさん
2018/10/13(土) 20:11:57.62ID:KKBwY8Qn
評価順序とスペースリークは他の言語にはないバグだから逆に増えてるところもある
しかも発見しづらい
サンクのサイズが一定量に収まるかとかIOの評価順序が正格かとかって静的に解析できそうな気がするができんもんかね
793デフォルトの名無しさん
2018/10/13(土) 20:39:20.93ID:H67rAYXW
データベース的な仕組みだとスペースリークを放置しているやつが多い
某OSのレジストリとか
794デフォルトの名無しさん
2018/10/15(月) 21:26:01.71ID:e5ZigS6A
Nixってなに?
795デフォルトの名無しさん
2018/10/15(月) 22:33:00.01ID:eL3fUBCp
くだらない質問で悪いけど質問させてほしい

Haskellでの優先順位について

・演算子の優先順位の記述はある
・関数適用の優先順位の記述はある

でも、関数の優先順位の記述が見当たらないんだけど(どっかに、左結合ってのはみた)
関数の優先順位はどうなるの?
要するに、かっこ付けの順番なんだけど

1.関数適用
2.演算子
3.関数 <= 最下位の優先順位でいいの? 不確かだけど、F#ではそのような記述があった 希ガス
796795
2018/10/16(火) 00:16:52.78ID:J1KdR+sZ
795だけど、質問がうまくまとまってない希ガス

演算子と関数というのがあるけど、演算子も関数と見なしていいんだよね
ていうことは、

まず、第一の疑問は
1.関数適用の優先順位が高いとして、沢山ある関数(演算子も含む)の中でどの順番で行うのか?

第二の疑問として
3.関数 の優先順位は何?

例えば、compfunc = funcA . funcB (3 + 4)があった場合、最初の関数適用にfuncAと後ろの(.)が
が選ばれない理由でもいいかも
797デフォルトの名無しさん
2018/10/16(火) 00:29:51.00ID:Y+LwBtWJ
a b c d e fの並びは(((((a b) c) d) e) f)
このa,b,c,d,e,fが関数だとか値のバインドだとか関係ない

そういう話ではない?
798デフォルトの名無しさん
2018/10/16(火) 00:34:17.39ID:Y+LwBtWJ
演算子を関数としてみなすなら
compfunc = funcA . funcB (3 + 4)
は関数として展開して
compfunc = (.) funcA (funcB ((+) 3 4))

compfunc = (((.) funcA) (funcB (((+) 3) 4)))
だよね
799デフォルトの名無しさん
2018/10/16(火) 00:43:59.67ID:J1KdR+sZ
>>797
それを真としすると
自分の理解では、a : funcA b:(.) c: funcB d:(3+4)となるけど、
実際の計算は(((((a b) c) d) e) f)とあってないと思う。

compfunc = funcA . funcB . funcC (3 + 4)の方が分かりやすかったかもしれないけど
関数合成は (funcA . (funcB . funcC)) (3+4)だから (つまり関数合成は右結合)
(((((a b) c) d) e) f)になってないと思う。 (関数というか、カリー化は左結合)
800デフォルトの名無しさん
2018/10/16(火) 00:47:21.87ID:J1KdR+sZ
>>798

>>799は無視してください。こっちの方が本質だから

うん、その場合なぜ、

funcAより、(.)を関数適用の優先順位を上げたのかが
自分の疑問といってもいいと思う

関数適用の優先順位が高いのはいいとして、
じゃあ、どの関数から関数適用をするの?というのが、私の疑問
801デフォルトの名無しさん
2018/10/16(火) 01:38:23.70ID:iR5P4NYU
>>796
演算子と関数とは似ているように思うかもしれないがちゃんと区別したほうがいい
まず関数適用とは雑に言えば項の間の半角スペースのこと
関数とか定数とか(ただし演算子は除く)をスペースでくっつけるのが関数適用
その関数適用の結合はカッコを除いて最優先なので、特に全ての演算子に優先する
(結合の仕方は>>797の通り)
そして
(.) :: (b -> c) -> (a -> b) -> a -> c
は慣れないうちは紛らわしいが、単に関数を引数に取る2項演算子なので
(演算子として使う限りは)関数適用より優先順位が低い

うーんいまいちちゃんと説明しきれてないし用語の使い方もアヤシイので
誰か詳しい人頼む
802デフォルトの名無しさん
2018/10/16(火) 01:48:57.45ID:R77VKNPD
haskellの構文のBNFを見てみればいいんでない?
803デフォルトの名無しさん
2018/10/16(火) 03:22:14.15ID:q8KCyqRj
質問です。
正確には覚えてないんですが、Haskell の型宣言を省略した場合、コンパイラ、インタプリタがよきにはからってくれてなるべく適用範囲が広い型をつけてくれます。
でもそれは Top-Level ではダメって制約があったと思うんですが、この制約なんか名前ついてたとおもうんですがなんでしたっけ?
これなんの為にあるんでしょう?
これ外すための GHC のオプションがあった記憶もあるんですがわかります?
数年ぶりに Haskell つかったら昔とったハズの杵柄がボロボロに orz。
804デフォルトの名無しさん
2018/10/16(火) 07:09:37.73ID:t1I/4hrX
>>803
https://wiki.haskell.org/Monomorphism_restriction
805デフォルトの名無しさん
2018/10/16(火) 14:35:49.92ID:4kzhBxnD
>>804
あざっす❗
806デフォルトの名無しさん
2018/10/16(火) 16:03:37.14ID:Y+LwBtWJ
>>799
compfunc = funcA 1 2 . funcB 4 5 . funcC 5 6 $ funcD 7 8
とあったとき、まず演算子を越えずに関数適用
compfunc = ((funcA 1) 2) . ((funcB 3) 4) . ((funcC 5 ) 6) $ ((funcD 7) 8)
このあとで演算子の優先順位で計算

>自分の理解では、a : funcA b:(.) c: funcB d:( 3+4)となるけど、

a:(.) b:funcA c:(funcB (3 + 4)) だよ
そして a:funcB b: (3 + 4)
そして a:(+) b:3 c :4
演算順序を決める丸括弧は展開出来ないよ
807デフォルトの名無しさん
2018/10/17(水) 03:18:56.29ID:QhFRNLWc
300行近くあるコードなんですが
Haskellの書き方としてイケてない書き方あったら教えてもらえたら嬉しいです
BASIC言語風のインタプリタです

https://csacademy.com/code/4vUVk5c9/
808795
2018/10/17(水) 09:26:31.84ID:NmM3N1fc
なんとなくわかったというか 暫定でわかった
要するに”関数適用の優先順位は高い”なんだろうね

関数の優先順位の記述が無いのは、そのようなルールが不要だと思えばいいわけで。
かっこ付けのやるべき順序として

1.関数適用 部分適用が出来るなら強欲に
2.演算子の優先順位と結合性でかっこ付け

これで、かっこ付けが終わったので、シグネチャとの整合性を取ってみる。
あっていなければ、コンパイラーエラー

ということで、コンパイラーも理解出来そうなルールになっていそうだし、
>>806とも整合性が取れそうかな
809デフォルトの名無しさん
2018/10/17(水) 09:28:42.96ID:NmM3N1fc
>>806さん いろいろThx
810デフォルトの名無しさん
2018/10/17(水) 11:49:29.63ID:RJ0latBv
BNF見ればちゃんと分かる
https://www.haskell.org/onlinereport/haskell2010/haskellch3.html
単純化するなら
exp = exp1 | exp1 op exp
exp1 = exp2 | exp1 exp2
exp2 = var | (exp)
二項演算子の優先順位を実現するには別の処理が必要だけど
少なくとも関数適用と二項演算子の計算が並ぶことはない
811デフォルトの名無しさん
2018/10/17(水) 12:47:09.36ID:NmM3N1fc
>>810
それが、関数適用とどう関係があるのか、俺には理解できない


とうとう俺もBNFを勉強するときが来たようだw
数年に1度、思い出したようにBNFがネックになるんだけどね
今まで避けてきたw
812デフォルトの名無しさん
2018/10/17(水) 12:50:35.76ID:DKH+Jm9W
>>811
どの言語をやるにしても、ちゃんとした理解には必要になるから頑張れ
813デフォルトの名無しさん
2018/10/17(水) 14:46:13.41ID:97sxRiiz
>>807
イケてるかどうかなんて個人の好き嫌いだよ。
あなたの中に、こういう感じのコードは好きだけど、こういうのは嫌いというのがあって、
その基準に照らして好きなコードになっていたら、それはあなたの中ではイケてるコード、
嫌いなコードになっていたら、あなたの中ではイケてないコードということだ。
そして、好き嫌いの基準は人それぞれ、千差万別なんだよ。
他人の好き嫌いに無理に合わせる必要はない。

それを踏まえた上で、敢えて俺の好き嫌いを言うと、
俺は見通しが良くて、メンテしやすくて、発展させやすいコードが好きだ。
(宣言的ならなお良い)
だから、

・pureな計算とimpureなアクションを別の関数として分けているコードは好き。
 分けていないコード大っ嫌い。

・高凝集度で低結合度なコードは好き。
 逆は嫌い。

・1つの小さな仕事をさせている関数は好き。
 いくつもの仕事をさせて肥えている関数は大嫌い。

・1つの役割だけをしっかり果たしているモジュールは好き。
 ごった煮モジュールは大嫌い。

この基準でいくと、あなたのコードはまったくイケてない。
814デフォルトの名無しさん
2018/10/18(木) 00:55:40.72ID:EL1XNa21
>>813
あざっす!勉強になりやした!精進しやす!
815デフォルトの名無しさん
2018/10/19(金) 20:20:03.11ID:XWoSmko3
>>813
そういうコードの設計センスはどうやって学んだのですか?
816デフォルトの名無しさん
2018/10/19(金) 21:59:48.14ID:Jw4VQ9Ey
>>815
大半はHaskell関係なくて、設計論の話
817デフォルトの名無しさん
2018/10/19(金) 22:13:22.28ID:8Ox5P+xa
テストどうすんべとか、保守どうしようとか、合成できるようにしたいとか
考えるとええんやで(こなみ)
818デフォルトの名無しさん
2018/10/20(土) 12:25:50.44ID:u8BRF3D8
>>813
+1
http://d.hatena.ne.jp/k3_kaimu/
819デフォルトの名無しさん
2018/10/24(水) 13:56:56.60ID:eHXbzfVY
+が正格で:が正格じゃないということの意味を教えてください。
820デフォルトの名無しさん
2018/10/24(水) 15:31:36.63ID:eHXbzfVY
じこかいけつしますたw
821デフォルトの名無しさん
2018/10/30(火) 14:24:11.19ID:pQwXzgRa
stack の lts-12.x にはなぜ Yampa パッケージがないんだろ?
11.x の頃はあったのに。
822デフォルトの名無しさん
2018/11/02(金) 08:09:05.71ID:QsNsn2yU
stackでhp2prettyってどうやってインストールするの?
823デフォルトの名無しさん
2018/11/02(金) 15:49:58.24ID:98olsR6p
>>822
stack install hp2pretty
でいける
824デフォルトの名無しさん
2018/11/03(土) 07:37:57.15ID:KyIBYeD2
>>823
ありがと。
ヘルプ見て、stack install == stack build --copy-bins って
カレントディレクトリのプロジェクトをビルドしてできた
実行ファイルをコピーするコマンドだと思いこんでた。
825デフォルトの名無しさん
2018/11/07(水) 13:48:52.85ID:VCaKs67w
以前の GHC.Stats モジュールには GCStats 型がありましたが、
GHC 8,4,1 からは廃止され、代わりに RTSStats 型および GCDetails 型になったみたいです。

そこで質問です。
以前の currentBytesUsed 関数は今で言うとどの関数に対応、あるいは近いのでしょうか。
gcdetails_live_bytes 関数でしょうか。
826デフォルトの名無しさん
2018/11/09(金) 08:25:29.12ID:rrSKeTdW
f :: a -> b -> c
このコロン以降の部分って、英語圏の人は何て発音してるの?

"a to b to c" で良いの? 不自然かな?
827デフォルトの名無しさん
2018/11/09(金) 11:20:46.63ID:DHGOZxva
英語圏のコミュニティで日本人なんだけど。。。って質問した方が早いのでは。。。
828デフォルトの名無しさん
2018/11/09(金) 11:46:57.84ID:z1XmYBYX
そもそも日本人はどう読むんだよ
829デフォルトの名無しさん
2018/11/09(金) 11:47:53.76ID:p9aTnaT/
a arrow b arrow c
call a, b, and c
830デフォルトの名無しさん
2018/11/09(金) 12:13:53.97ID:vhYIIJha
漫画と同じだろ
台詞は発音するが絵は発音しない
a b c以外は発音しない
831デフォルトの名無しさん
2018/11/09(金) 15:06:42.54ID:gCUmlTjd
エフはエーからビーからシー
って読んでるわ
832デフォルトの名無しさん
2018/11/09(金) 19:57:17.40ID:Rc4d95qg
>>828
ほんそれ
833デフォルトの名無しさん
2018/11/09(金) 20:22:07.58ID:rrSKeTdW
みんなありがと。

よう分からんから、自分を信じて "a to b to c" って言っておくわ。

>>828
べつに日本語で読まなくてもいいと思うが。
英語でいいんじゃね?
834デフォルトの名無しさん
2018/11/09(金) 20:43:11.08ID:Rc4d95qg
それって、そもそも発音する場面なんてあるか?
って意味じゃ・・・

つか、無理にtoで読むとして
f::(a->b)->(a->c)
はどう読むつもりだよ
835デフォルトの名無しさん
2018/11/09(金) 21:02:46.92ID:XtklT8Hz
身近にハスケルの話しできる人なんかいないから発音したこと無いぜ
836デフォルトの名無しさん
2018/11/09(金) 23:03:09.33ID:TUe4RwSk
Haskell使って仕事してる人に聞いてみるしかないな
837デフォルトの名無しさん
2018/11/09(金) 23:07:51.58ID:9yt5Xmdj
>>834
えっと、びーと、えっと、しー
838デフォルトの名無しさん
2018/11/09(金) 23:19:25.21ID:ThtHVzoQ
いや〜ん エッチィ
839デフォルトの名無しさん
2018/11/10(土) 02:48:27.14ID:A3qdJv3l
c9のhuttonとmeijerのlectureでは、huttonが a to b、meijerが
a arrow bだったと思うけど、別の呼び方しても誰もなんとも思わないよ
モデル上ではcurry化なんて考える必要ないから、数式のまま
f of a and b to c (か、f of a to, b to c)でもいい

(a->b)->(a->c)
は、a arrow b, arrow (or to), a arrow c
,は少しの間
840デフォルトの名無しさん
2018/11/15(木) 22:01:12.82ID:ExoyI5Rr
2つの型クラスの間に包含関係を付けるのに
MonadからApplicativeのときみたいに
一方を定義すれば自動的に他方が導出されるようにするのと、
FunctorからApplicativeのときみたいに
一方を定義してからでないと他方を定義できないようにするのと、
どっちのやり方がいいのかな
841デフォルトの名無しさん
2018/11/15(木) 22:08:48.54ID:349+82Of
変数に再代入できる言語に
慣れきっている者の質問なのですが

[1,2,3,4,6,7,8]を順次加算して
[0,1,3,6,10,16,23,31]にする関数を
Githubの作例を参考に実装してみたのですが
直感的に解りづらく、
foldを使ってもっと簡潔・簡単にできないものでしょうか。

ints1 :: [Int]
ints1 = [1,2,3,4,6,7,8]

fn :: Int -> [Int] -> [Int] -> [Int]
fn n [] acum = n : acum
fn n (i : ints) acum = fn (n + i) ints (n : acum)

-- reverse $ fn 0 ints1 []
842デフォルトの名無しさん
2018/11/15(木) 22:24:44.73ID:jJzADtia
scanl (+) 0 [1..8] では?
素人なのでわからないけど
843デフォルトの名無しさん
2018/11/15(木) 23:19:14.92ID:5uoUpH2U
842です
foldで書いてみました

fn :: [int] → [int]
fn = foldl (\acc x → acc ++ [last acc+x]) [0]

-- fn [1..8]
844デフォルトの名無しさん
2018/11/15(木) 23:51:13.43ID:349+82Of
>>841 >>842
どうもありがとうございます。

驚くほど簡潔に書けるものですね!
今まで気にしなかった (++) の有用性を理解しました。
ありがとうございます。
845デフォルトの名無しさん
2018/11/15(木) 23:58:57.35ID:349+82Of
>>843
どうもありがとうございます。

驚くほど簡潔に書けるものですね!
今まで気にしなかった (++) の有用性を理解しました。
ありがとうございます。
846デフォルトの名無しさん
2018/11/16(金) 00:12:59.47ID:mACu1uNV
842です
いえいえ、私も初学者なので
scanl はともかく、foldl の方はどうかなと

先輩諸兄のレスを待ってください
847デフォルトの名無しさん
2018/11/16(金) 01:31:49.81ID:1zT7OHrw
何使ってもいいならData.Listのinitsを使って

map sum $ inits [1..8]

が楽チン。
848デフォルトの名無しさん
2018/11/16(金) 18:07:13.25ID:0oMzWKAu
>>840
継承クラスに相当するのがMonad=>Applicativeタイプ
委譲クラスに相当するのがFunctor=>Applicativeタイプ

>>841
The Haskell 98 Report
8 Standard Prelude
https://www.haskell.org/onlinereport/standard-prelude.html
scanl :: (a -> b -> a) -> a -> [b] -> [a]
scanl f q xs = q : (case xs of
[] -> []
x:xs -> scanl f (f q x) xs)

scanr :: (a -> b -> b) -> b -> [a] -> [b]
scanr f q0 [] = [q0]
scanr f q0 (x:xs) = f x q : qs
where qs@(q:_) = scanr f q0 xs
849デフォルトの名無しさん
2018/11/16(金) 18:12:37.84ID:3YKNNj99
正直全然読みやすくないのだが、本当に読みやすくないのか俺が手続き脳なだけなのか判断がつかない
850デフォルトの名無しさん
2018/11/16(金) 18:56:19.39ID:0oMzWKAu
>>849
qのところが(f q x)に替わって再帰してるだけだよ

scanl (+) 0 [1,2,3,4]
= 0 : scanl (+) (0 + 1) [2,3,4]
= 0 : 1 : scaln (+) (1 + 2) [3,4]
= 0 : 1 : 3 : scanl (+) (3 + 3) [4]
= 0 : 1 : 3 : 6 : scanl (+) (6 + 4) []
= 0 : 1 : 3 : 6 : 10 : []
= [0,1,3,6,10]
851デフォルトの名無しさん
2018/11/18(日) 07:38:58.15ID:2lh9j78G
if then elseを最近知った位の超初心者です。
(自分の頭以外に)どこが悪いのかわからないので教えていただきたくて投稿します。

kld1 p q = do -- Kullback-Leibler divergence
-- if length p /= length q
-- then return ()
-- else do
let pp = map (/sum(p)) p
qq = map (/sum(q)) q
in sum $ zipWith (\x y -> x * (log x)/(log y)) pp qq
*Main> kld1 [1/2,1/2] [1/4,3/4]
1.4547104198266045
と動作しますが、エラー処理のコメントアウトを外すとコンパイルはできても

kld2 p q = do -- Kullback-Leibler divergence
if length p /= length q
then return ()
else do
let pp = map (/sum(p)) p
qq = map (/sum(q)) q
in sum $ zipWith (\x y -> x * (log x)/(log y)) pp qq

*Main> kld2 [1/2,1/2] [1/4,3/4]

<interactive>:16:1: error:
? No instance for (Floating (m0 ())) arising from a use of ‘it’
? In a stmt of an interactive GHCi command: print it
と返ってきてエラーメッセージの意味すら理解できません。
if ~ elseの部分はどう直せばいいのでしょうか?

モナドも未学習の超初心者ですので、宜しくお願いします(_ _)。
852デフォルトの名無しさん
2018/11/18(日) 08:49:53.03ID:FSPPo7pC
if-then-else
で返り値の型が違う
853デフォルトの名無しさん
2018/11/18(日) 09:57:38.99ID:XromDw/4
>>852
型を合わせるにはどう対処すればいいのかわからないのですが、
とりあえず、これで動きました。

kld p q = do -- Kullback-Leibler divergence
if length p /= length q
then error "Not equal length"
else do
let pp = map (/sum(p)) p
qq = map (/sum(q)) q
in sum $ zipWith (\x y -> x * (log x)/(log y)) pp qq
main = do
print $ kld [1,1] [1,3]
print $ kld [1,1] [1,2,3]
854デフォルトの名無しさん
2018/11/19(月) 18:56:00.44ID:NOUcIUOi
型を合わせるだけなら
https://ideone.com/VBpsvO
もちろん実行時エラー
855デフォルトの名無しさん
2018/11/20(火) 08:29:50.51ID:kos1zZ3I
関数型プログラミングでログ出力ってどうやってるんですか?
例えば一つの関数で3回ログ出力したいときとか、Writerモナドだと関数内でエラーが起きたときとかうまく出力されてないですよね?
856デフォルトの名無しさん
2018/11/20(火) 10:01:49.03ID:jmuJusIM
flush
857デフォルトの名無しさん
2018/11/20(火) 10:53:51.88ID:QMY+cuul
Writerでは例外のようなものを投げることができないからもっと万能なモナドを使う
オブジェクト指向にたとえるとObject型
言語にたとえると動的型付け言語のような万能なやつが必要だ
858デフォルトの名無しさん
2018/11/20(火) 15:05:53.63ID:Bz9DRyU5
エラーが起きないように組めばいい
859デフォルトの名無しさん
2018/11/20(火) 16:37:16.27ID:kos1zZ3I
素直に副作用のある言語で組めってことですね
了解です
860デフォルトの名無しさん
2018/11/20(火) 18:07:48.61ID:QMY+cuul
Haskellにも副作用はある
ただ副作用を使えない制約の型が多くて型チェックが厳しいだけ
861デフォルトの名無しさん
2018/11/20(火) 18:35:37.40ID:kZ/DcFbd
>>855
そんな大それたもの作らないから使った事ないけど、ErrorTとか言うのがControl.Monad.Errorに入ってるっぽい。
何れにしても、本格的な開発するならRWHは持っておいた方が良い。
862デフォルトの名無しさん
2018/11/20(火) 21:54:07.61ID:tqW5qw7T
RWHの例外周りは古いからPCPH勧めないと
863デフォルトの名無しさん
2018/11/24(土) 12:20:05.11ID:dO0ZWwxC
haslell2010.pdfによくでてくる記号なんだけど”⊥”ってどう意味ですか?
値とか型ぽいんだけど、すごいH本とかの索引にはそんなん無いし。

https://www.haskell.org/definition/haskell2010.pdf
864デフォルトの名無しさん
2018/11/24(土) 13:06:50.85ID:4kdGLnPd
直交
865863
2018/11/24(土) 13:10:25.20ID:dO0ZWwxC
例えば、こんな書き勝たされてるんだけど

P19の一番下に
A conditional expression has the form if e1 then e2 else e3 and returns the value of e2
if the value of e1 is True, e3 if e1 is False, and ⊥ otherwise.

”⊥ otherwise”って何だろう?
866デフォルトの名無しさん
2018/11/24(土) 13:16:55.35ID:A/C05uoV
数学やれようざい
867デフォルトの名無しさん
2018/11/24(土) 13:24:01.18ID:dO0ZWwxC
ええええ 本当に直交って意味なの?

数学なら意味は分かるが(関数解析も入門とか初歩レベルなら読んだ)
プログラミング言語で直交ってどう意味?
868デフォルトの名無しさん
2018/11/24(土) 13:28:15.64ID:4kdGLnPd
独立
869デフォルトの名無しさん
2018/11/24(土) 13:38:59.48ID:tsQBCVAv
https://ja.wikipedia.org/wiki/ボトム型
870デフォルトの名無しさん
2018/11/24(土) 13:43:43.78ID:dO0ZWwxC
>>869
Thx ようやくまともな答えが

Haskellやってて面白いのが、新しい概念が増えていくのがうれしい 遅延評価とか
871デフォルトの名無しさん
2018/11/24(土) 13:59:53.00ID:1C+vWWG1
>>863
使わない値(_)や、未定義の値や型として使われてるね。
文脈から意味を汲み取るしか無い。
872デフォルトの名無しさん
2018/11/24(土) 14:01:51.50ID:1C+vWWG1
関数型プログラミング言語Haskell Part31©2ch.net	->画像>6枚


関数型プログラミング言語Haskell Part31©2ch.net	->画像>6枚
873デフォルトの名無しさん
2018/11/24(土) 14:15:54.52ID:1C+vWWG1
take undefined [] = undefined ― 入力待ち(Carl + Cで強制終了必須)
take 0 undefined = []

⊥をundefined = undefinedと定義してghci で試したとしても、プログラミングHaskellの説明と同じ動きをする。
874デフォルトの名無しさん
2018/11/25(日) 11:21:25.73ID:gET8Juo7
undef :: b -> a
undef ined = undef ined

これが ⊥ -> a とか () -> a とか () -> ⊥ とかになるせいで
⊥と()を区別する意味がわからなくなる
再帰禁止すれば違いがわかる
875デフォルトの名無しさん
2018/12/03(月) 16:13:07.05
Haskell では明示的に instance 宣言しなければ、ある class の要件を充たしていることをコンパイラが認識してくれません
Go ではインターフェイスの要件を充たしていれば明示的に宣言しなくても型システムがコンパイル時に暗黙的に推論してくれるそうです(日記帳)
876デフォルトの名無しさん
2018/12/05(水) 06:15:37.43
GitLab へ引っ越すんですって?
877デフォルトの名無しさん
2018/12/11(火) 10:40:31.76ID:w4wbcBCq
bsort [] = []
bsort xs = bsort' [] xs
where bsort' [] [] = []
bsort' xs [y] = y:bsort' [] xs
bsort' xs (x:y:zs) | x <= y = bsort' (y:xs) (x:zs)
bsort' xs (x:y:zs) = bsort' (x:xs) (y:zs)

バブルソートのつもり。。。
バブルと言うより勝ち抜きソートって感じだけど。
アルゴリズム図鑑アプリで動作見ながら、リストは頭からだから交換はコストかかるんでこんな形になった。
878デフォルトの名無しさん
2018/12/11(火) 10:48:30.82ID:w4wbcBCq
動作はこんな感じ。
bsort [3,5,2,4,1]
= bsort' [] [3,5,2,4,1]
= bsort' [5] [3,2,4,1]
= bsort' [3,5] [2,4,1]
= bsort' [4,3,5] [2,1]
= bsort' [2,4,3,5] [1]
= 1:bsort' [] [2,4,3,5]
= 1:bsort [4] [2,3,5]
= 1:bsort' [3,4] [2,5]
= 1:bsort' [5,3,4] [2]
= 1:2:bsort' [] [5,3,4]
= 1:2:bsort' [5] [3,4]
= 1:2:bsort' [4,5] [3]
= 1:2:3:bsort' [] [4,5]
= 1:2:3:bsort' [5] [4]
= 1:2:3:4:bsort [] [5]
= 1:2:3:4:5:bsort' [] []
= 1:2:3:4:5:[]
= [1,2,3,4,5]

最小値が一番最後の唯一つの要素になったらソート済みリストに追加して、
溜め込んだ最小値以外のリストを復帰させて残りのソートを続ける。
(ので、xsとysで見れば浮かび上がる様に見える(?)
879デフォルトの名無しさん
2018/12/11(火) 12:12:51.51ID:b3hhTnN8
スタックがヤバそう
880デフォルトの名無しさん
2018/12/11(火) 13:48:28.37ID:w4wbcBCq
[a] -> [b]な再帰関数はスタック消費しないよ。
881デフォルトの名無しさん
2018/12/16(日) 14:26:10.12ID:d+Ts3kFC
よりスマートに
https://gist.github.com/WhiteCat6142/a3270468cbf829200b7f66acd048b1a2

bsort=foldr bs []
where bs x []=[x]
bs x (y:ys)|x<=y =(x:y:ys)
|otherwise =(y:bs x ys)
882デフォルトの名無しさん
2018/12/18(火) 11:44:17.44ID:/M0/bFGF
歯透ける
883デフォルトの名無しさん
2018/12/18(火) 12:01:03.47ID:NUNmy+BV
パンツ透ける
884デフォルトの名無しさん
2018/12/18(火) 14:51:09.99ID:LIt8HoLP
>>880
Haskellよくわかってないんですが、
y:bsort' [] xs
の部分も末尾再帰でなくともスタック消費しないんですか?
885デフォルトの名無しさん
2018/12/18(火) 17:19:38.38ID:D1bDvywT
余再帰でも最適化かかる場合があるとかないとか
886デフォルトの名無しさん
2018/12/19(水) 09:01:32.80ID:xYxnZ8u2
最適化って言うけど最適化無しのddump-asmでもあんまりcallは使われてないんだよね
詳しくは知らないけど再帰と言えど少なくともWHNFで値を返すわけだから
サンクに入った再帰呼び出しを実際に再帰的に呼ぶ必要も無いってことだろう
つまり実際の呼び出しに評価元のスタックが使われるんだとしたら
リストを評価する場合には伸びだ分のスタックがコンスセル毎にクリアされる
887デフォルトの名無しさん
2018/12/20(木) 07:30:09.47ID:y4SKaDG8
https://ideone.com/r4bLq1
問題ない
888デフォルトの名無しさん
2018/12/20(木) 21:14:07.04ID:X0Fr2Ixv
これバブルソートじゃなくて挿入ソートだよね
889デフォルトの名無しさん
2018/12/21(金) 00:03:36.39ID:1VggrQKb
bsort = unfoldr (uncons . foldr step [])
where step x [] = [x]
step x (y:ys) | x <= y = (x:y:ys)
| otherwise = (y:x:ys)
890デフォルトの名無しさん
2018/12/21(金) 13:18:39.50ID:V4JbVdgQ
スタックマシンじゃなくてセルオートマトンだったらスタック消費しないよね
891デフォルトの名無しさん
2018/12/22(土) 08:09:42.23ID:9xYrH7YE
Prelude.div関数について。

Preludeモジュールをインポートしないで同義の関数を使いたい場合、
どのモジュールをインポートするのが理にかなっているでしょうか。

理にかなっていると言うのは、
import X (div)
という記述を見て「整数の商を求めるのだな」とか、
「数学的な計算の意味での div なんだな」と分かるという意味です。
import Prelude (div)
では意味が分かりません。
(正確には長年Haskell使ってるので意味は分かるが気持ち悪い)

できるだけ役割がハッキリして仕事が限定された小さなモジュールを求めています。
また stackage の中でお願いします。

basement の Basement.Numerical.Multiplicative.div が良い感じですが、
もっと良いものはあるでしょうか。
892デフォルトの名無しさん
2018/12/22(土) 09:55:43.41ID:NgVSh9Jk
>>888
(y:bs x ys)は遅延評価だから捜査逆のバブルソート
893デフォルトの名無しさん
2018/12/22(土) 10:39:40.85
   ミ    /、`二//-‐''"´::l|::l       l! ';!u ';/:::l ', ';::::::l ';:::::i:::::
    ニ    レ/::/ /:イ:\/l:l l::l   u   !. l / ';:::l ', ';:::::l. ';::::l:::::
     マ     レ  /:l l:::::lヽ|l l:l し      !/  ';:l,、-‐、::::l ';::::l::::
    リ       /::l l:::::l  l\l      ヽ-'  / ';!-ー 、';::ト、';::::l:::
    ス        /::::l/l::::lニ‐-、``        / /;;;;;;;;;;;;;ヽ!   i::::l:::
    ト       /i::/  l::l;;;;;ヽ \             i;;;;;;;;;;;;;;;;;;;l   l::l:::
        /:::l/:l /;;l:!;;;;;;;;;',               ';;;;;;;;;;;;;;;;;ノ    l:l::
         /::::;ィ::l. l;;;;!;;;;;;;;;;;l            `‐--‐'´.....:::::::::!l
   __|_ ヽヽ   /イ//l::l ヽ、;;;;;;;ノ....      し   :::::::::::::::::::::ヽ /!リ l
    | ー      /::::l';!::::::::::::::::::::  u               ', i ノ l
    | ヽー     /イ';::l          ’         し u.  i l  l
     |       /';:';:!,.イ   し    入               l l U
     |      /,、-'´/ し      /  ヽ、   u    し ,' ,'  l
     |        /l し     _,.ノ     `フ"       ,' ,'  ,ィ::/:
     |       /::::::ヽ       ヽ    /     し ,' ,' / l::
     |      /::::::::::::`‐、 し      ',  /    u   ,、-'´  l,、-
     |      ``‐-、._::::::::::` ‐ 、     ',/       , -'´`'´ ,-'´
     |      _,、-‐'"´';:::::::::イ:l';:::` ‐ 、._____,、-‐'"´  u /
   | | | |    \ l::/ l::::::/リ ';:::::lリ:::::l';:::l l:l:::::l\  u /
   | | | |
894デフォルトの名無しさん
2018/12/22(土) 11:38:44.98ID:SGb2VOwM
>>891
その「気持ち悪い」の方がよっぽど意味不明なんだから
divの意味が分からないくらい許してやれよ
895デフォルトの名無しさん
2018/12/22(土) 15:07:06.49ID:j3oO0IK0
>>891
気持ちわかる。import Data.Integral (div) くらいでやりたいよね。
import Prelude (Integral(div)) はどうかな
896デフォルトの名無しさん
2018/12/23(日) 00:20:58.06ID:OufBT+Yp
>>875
公称的部分型(ノミナルサブタイピング)
構造的部分型(ストラクチャルサブタイピング)
897デフォルトの名無しさん
2018/12/23(日) 00:50:21.75ID:2lSG181k
型推論って、いったい何を目指してるの?
コンパイラは推論できても、人間にとって読みやすいものと思えないんだけど
898デフォルトの名無しさん
2018/12/23(日) 02:11:43.05ID:YigQT2JG
template<typename T>って宣言してもどうせ読めないから宣言しないのを目指す
899デフォルトの名無しさん
2018/12/23(日) 02:17:29.50ID:zMRMmtKp
>>897
関数型言語だと型を考えることがプログラミングだと言うね
900デフォルトの名無しさん
2018/12/23(日) 16:02:25.42ID:dHWagv9n
Practical Web Development with Haskellってのがまだ70Pくらいしか読んでないけど
認証つきWebアプリをいちから写経しようぜってつくりで初〜中級者にいい感じっぽい
Data.Hasとかこれで初めて知ったわ
901デフォルトの名無しさん
2018/12/23(日) 19:07:09.70ID:VkAdoKxx
>>894
気持ち悪いは言い過ぎでした。
あまりハッピーではない、くらいです。

>>895
Integral で意味は分かるでしょ、という事ですね。

探すよりそれが楽で現実的だとは私も思うのですが、
Prelude から取ってくるのは何かこう目的と違うと言うか、
それで妥協するのがちょっと悔しいです。
(Prelude って OOP でクラスを ~Manager とか ~Utility って命名する感がある)

でもアドバイスは有り難いです。
参考にさせてもらいます。
902デフォルトの名無しさん
2018/12/23(日) 19:28:31.47ID:14edUGfJ
Preludeなんてものは要らなくて、divはData.integralに入ってて、divを使うには毎回Data.Integralからimportするのが理想って認識で合ってる?
Preludeのその他諸々の関数も含めて
903デフォルトの名無しさん
2018/12/23(日) 20:21:12.14ID:YigQT2JG
LinuxにたとえるとデフォルトのGUIなんてものは要らなくて
無数のディストリビューションから選択するのが理想という認識
904895
2018/12/23(日) 20:57:49.01ID:gIQVihKw
>>901
http://hackage.haskell.org/package/base-4.12.0.0/docs/src/Prelude.html
を読んで思いついたんだけど、
import GHC.Real (div)
はどうだい。プレリュードはそのモジュールをre-exportしてる。
905デフォルトの名無しさん
2018/12/24(月) 17:05:01.14ID:ovQS6rqM
>>900
Javerが4年で手本になるこなれたコードを書けてるのか疑問なんだがどんな?
906デフォルトの名無しさん
2018/12/24(月) 18:43:23.42ID:ovQS6rqM
うわああああこの前Amazon.comから輸入したHaskellの洋書Amazon.co.jpでも売ってたああああ
失敗した
907デフォルトの名無しさん
2018/12/24(月) 20:36:56.95ID:OvWyYJqn
当初から比べたらco.jpの洋書の品揃えはずいぶん充実したよね
アカウントを未だ両方持っているけど米版は使わなくなった
908デフォルトの名無しさん
2018/12/25(火) 11:18:00.52ID:yeWprDEr
洋書なら輸入の方が安いって話では
909デフォルトの名無しさん
2018/12/25(火) 12:11:51.62ID:3tfaERbL
専門書だと、各地域のamazonで送料込みでも一万円近く違ったりするから
確認はしてる。ごく稀にamazon.co.jpが破格になることもあるけど。
haskell関連だと
Computational Oriented Matroids: Equivalence Classes of Matrices within a Natural Framework
Juergen G. Bokowski
をco.jpで2800円で購入してた。他だと1万円超え。いまもco.jpでセールになって5700円で買えるみたい。
なお、haskellの学習にはなんの役にも立たないので、その分野の数学をやりたい場合だけ買ってね。
910デフォルトの名無しさん
2018/12/25(火) 22:13:34.24ID:S7Os6UpT
>>904
ありがとうございます。

実はそれ、存在は知ってました。
実際インポートできる事も試して知ってます。

ただそのモジュール、base パッケージで公開されていません。
https://www.stackage.org/lts-13.0/package/base-4.12.0.0
これを使うのは、Internal 系モジュールを使うよりもっとヤバくないですか?
911デフォルトの名無しさん
2018/12/28(金) 21:37:48.04ID:+Hytqb0t
Haskellerって薬漬けのヤベー奴しかいねーのかよwww
http://fumieval.hatenablog.com/entry/2018/12/27/213853
912デフォルトの名無しさん
2018/12/28(金) 21:49:01.05ID:Wkr1Do53
なんか、Haskellなかなか理解進まない

今は、遅延評価あたりをwebで探して読んでるんだけど、
ここら辺のいい日本語の本無いですか?

キーワードは
遅延評価、サンク、ラムダ式、簡約(出来ればグラフ簡約もあれば)当たりが載ってれば
あとは、コンビネータとかもあるとうれしい

情報系の教科書でも、Haskellの教科書でもどちらも大歓迎
913 ◆QZaw55cn4c
2018/12/28(金) 21:53:15.13ID:8AWKvvCO
>>911
エビリファイなんて飴玉ですよ…
私はセレネース(ハロペリドール)とベゲタミンでなんとか生きています…
https://ameblo.jp/kyupin/entry-10102907726.html
「ベゲタミンAおよびBは神の薬で、あれを思いついた人はたぶん天才だと思う。あれは合剤だから神なのであって、あの成分をバラバラに処方すると、なぜかベゲタミンほどは効かない。まぁいずれにせよ絶妙な組み合わせなのだろう。」
914デフォルトの名無しさん
2018/12/28(金) 23:38:37.19ID:8YrCKoD/
もともとポエマーな感じだったけどガチやん・・・
915デフォルトの名無しさん
2018/12/28(金) 23:49:03.28ID:6JJumxSW
>>912
遅延評価実装の仕組みが知りたいと?
916 ◆QZaw55cn4c
2018/12/29(土) 00:32:49.36ID:lsgoHDjS
>>914
これらより強力な薬はいろいろ見聞きする限りではないようですね…
917デフォルトの名無しさん
2018/12/29(土) 02:03:55.74ID:Btke7xay
何が目的で何がわからないかわからないとググって出てきたページ読めくらいしか言えない
918デフォルトの名無しさん
2018/12/29(土) 05:40:28.14ID:KKd0HoHx
この人殺人予告まがいのことしてた人じゃん
919デフォルトの名無しさん
2018/12/29(土) 08:40:48.37ID:+cssvHV/
>>911
この人、技術的にはなんか凄腕っぽくてフォローしてたけど、こんな人だったんか……(困惑)
920デフォルトの名無しさん
2018/12/29(土) 10:05:29.13ID:sjBWTUOw
今朝のテレビの天才特集で
西川徹でてたわ pfiのひと
921デフォルトの名無しさん
2018/12/29(土) 11:49:29.33ID:um1nA50l
>>915
うんにゃ 一番知りたいのは レスポンス周り
ちょっと、混乱中なのでうまく書けないんだけど

例えば、サンクってどういうルールで作られるとか どういうルールでつぶされていくのかとか
(単純な四則演算だけど括弧付きがあった場合と 2*2*(3+4)のサンクのの適用法は?最左最外簡約との関係は?)
遅延評価では、必要なところまで評価と書かれているけど、WHNFとそれは一致するのか
(WHNFの中でλ式が出てくるところまでとあるけど、それは式の評価の必要なところなの?)
正直いうと、プリミティブも曖昧なイメージはあるけど、正確には分かっていない。多分組み込み的な型とか演算子、関数だよねw

Webで得られるのは、どうしても断片的な知識になるんで、個々の知識が繋がりづらいのと、
あとはちょっと信頼性が落ちてたりする(初心者には間違いが分かりづらい)
ある程度知識がしっかりしてる人には、内容の真偽を含めそれで十分なのかもしれないけど
922 ◆QZaw55cn4c
2018/12/29(土) 12:04:31.84ID:lsgoHDjS
>>918
「殺人予告」と「殺人予告まがい」とは違うものですよね…
923デフォルトの名無しさん
2018/12/29(土) 12:16:13.76ID:UYTJL+lP
>>921
SICP読んだ後、言語ごとの構文解析ちゃんと調べればいいんじゃないかな
924デフォルトの名無しさん
2018/12/29(土) 12:54:03.27ID:EK4sWEwk
>>919
ほんそれ
925デフォルトの名無しさん
2018/12/29(土) 13:00:10.35ID:um1nA50l
>言語ごとの構文解析ちゃんと調べればいいんじゃないかな
構文解析という言葉になじみが無いんですが
Haskellの場合具体的に何をすればいいですか?
(情報系の教育は受けてないんで ただ、これからそっち系を漁ろうとはしているけど)


SICPは多分自分の好物w 読みたい候補に入れとく
926デフォルトの名無しさん
2018/12/29(土) 13:48:17.43ID:0jIQbIRd
形式的なのはhaskell language reportってのがあるけど
ボトム(undefinedとか)の扱いが定義されてるだけでサンクの項目は無いね
ボトムの定義としては評価してみないと区別できないってことだから
これを関数に渡してもエラーにしないって感じで評価方法が規定されてる
927デフォルトの名無しさん
2018/12/29(土) 14:32:03.91ID:Btke7xay
基本的な知識なしに局所的に理解しようとするからわからないんでしょ
数冊テキスト読んでるうちにたいていの疑問は消える
928デフォルトの名無しさん
2018/12/29(土) 14:51:54.06ID:HTMRsjvp
The implementation of functional programming languages
https://www.microsoft.com/en-us/research/wp-content/uploads/1987/01/slpj-book-1987-small.pdf
929デフォルトの名無しさん
2018/12/29(土) 16:29:44.50ID:um1nA50l
取りあえず、>>912の質問の回答してくれてありがとう >> 回答者

>>928 それの日本語版頂戴w は冗談として

Haskell本って遅延評価はあんまり書かれていないのかな
サンクとかそれなりに書かれていてもいいと思うけど

とはいえ、もうちょっと具体的な質問が出来るよう出直してきます
930デフォルトの名無しさん
2018/12/29(土) 17:00:23.21ID:e0g6OpD4
実践的なのはこんなの webだけど
スペースリーク、その傾向と対策 - Qiita
https://qiita.com/ruicc/items/bfa659c2ef9e1f75f7e1
931デフォルトの名無しさん
2018/12/29(土) 17:36:10.57ID:FOaDygsP
遅延評価は並列処理を学ぶときにちょろっと深くやるくらいな印象
Haskellにおける並列実行 - 純粋関数型魔境 http://amothic.hatenablog.jp/entry/2013/10/09/220004
『Haskellによる並列・並行プログラミング』の中で
この記事の前半部分をもうちょっと詳しく書いてるけど
それでも10ページ未満くらいの分量
932デフォルトの名無しさん
2018/12/31(月) 00:40:09.80ID:eNA22sUO
参照カウントを除けばGCのアルゴリズムはみんなメモリ解放を遅延しているという事実
のせいでC++のようなGC無し言語の支持率が異常に高い
933デフォルトの名無しさん
2018/12/31(月) 11:19:16.45
GC管轄外領域にROMを作って高速に読み出す機能ができたんですって?
934デフォルトの名無しさん
2018/12/31(月) 20:24:52.37ID:/+DS/TZA
>>910
「公開されてないモジュール」というのがあるんだ…
stackageから探せなくて、 GHC.Real のように https://hackage.haskell.org/package/base-4.12.0.0
でリンクなしになってるモジュール。これらは一体どういうものなの? どうやって作る?

外部から使いたいモジュールは、cabal ファイルの exposed-modules セクションに並べる。
テストなどのために外から使いたいが、あまり使って欲しくないものをInternalモジュール配下に。
使用を禁止したいものは exposed-modules から外す。
モジュールの公開はその三択だと思ってた。
935 【吉】 【116円】
2019/01/01(火) 00:46:23.00ID:I2U7Qk8Q
GHC.Realこれ?

https://www.haskell.org/haddock/libraries/index.html

https://www.haskell.org/haddock/libraries/GHC.Real.html
936デフォルトの名無しさん
2019/01/01(火) 11:32:28.92ID:9+QtWrOm
それです
937デフォルトの名無しさん
2019/01/01(火) 17:19:58.78ID:7ZW7L+dS
HRR(Haskell relational record)で遊んでるんだけど、
ポスグレのreturning○○に対応したinsert文を生成する機能てないかな?
オートインクリメントある表とかはべたにクエリ書いたほうが楽に感じてしまう
938デフォルトの名無しさん
2019/01/05(土) 19:51:01.28ID:iNZzFN2I
Javaでいえばルール付きインターフェイスがHaskellのモナドという理解でOK?
実装時インターフェイスよりちょっと守るべきルールと性質が多いのがモナド。
型はJavaでいえば複数のインターフェイスを継承できる感じでいいですか?
939デフォルトの名無しさん
2019/01/05(土) 20:04:34.05ID:KrQndHog
モナドは単なる自己関手の圏におけるモノイド対象だよ。
940デフォルトの名無しさん
2019/01/05(土) 22:45:17.04
モナドは単なる自己関手の圏におけるモノイド対象だよおじさん「モナドは単なる自己関手の圏におけるモノイド対象だよ」
941デフォルトの名無しさん
2019/01/06(日) 00:04:04.86ID:13gMXODg
Javaのクラスやインターフェイスは
メソッドの定義を変えられるがメソッドの型は変わらない
例えばObjectクラスのメソッドの定義を変えてもメソッドの型が変わらないので
型チェックが甘い

Haskellのクラスはメソッドの型も変わる
942デフォルトの名無しさん
2019/01/06(日) 09:16:44.99ID:7U4qFACZ
>>941
なるほどなあ勉強不足でした。
聞いてみてよかったです。
943デフォルトの名無しさん
2019/01/06(日) 20:47:40.51ID:8Nv8H8lo
「where」の日本語読みに関してだけど
「左記の名前(モジュール名/クラス名/インスタンス名/関数名)が
示す物の中では以下の定義が行われています。」
て言う読み方でいいの?

英語の関係福祉 where の「〜する所の」と同じ意味でいいのかどうか。
944デフォルトの名無しさん
2019/01/06(日) 21:59:18.26ID:RK31I1jj
右な左。
945デフォルトの名無しさん
2019/01/07(月) 06:30:03.04ID:Tzw/TAIJ
>>943
haskell の where は数学の教科書なんかに同じ使い方で普通に出てくる。
というか、haskell が数学から借りてきた。

難しく考えないで、自然に

f = g x where x = ...

f は g x と定義される。
「なお、ここで x は ... である」

みたいに読めばいい。
946デフォルトの名無しさん
2019/01/07(月) 14:03:18.35
ん? x の定義は where?となるから先回りして where と書いてる
947デフォルトの名無しさん
2019/01/08(火) 00:20:15.62ID:t9mDJmjK
数学の教科書・・?
948デフォルトの名無しさん
2019/01/08(火) 11:30:51.32ID:GKZx39y6
SQLか
949デフォルトの名無しさん
2019/01/08(火) 11:56:51.91ID:ZgpKo6ms
>>947
ごめん、何が ? なのか分からないんだが。
ぼかさず具体的に質問してくれると助かる。

教科書とか参考書とか読み物とかでよく見るよ。
例えば、Haskell に関係ありそうなのだと、
Steve Awodey 著 Category Theory Second Edition の 15~16 ページ目とか。

-----[ 引用 ]-----
The arrow category C-> of a category C has the arrows of C as objects,
and an arrow g from f : A -> B to f' : A' -> B' in C-> is a "commutative square"
(ここに図があり、g1 と g2 が出てくる)
where g1 and g2 are arrows in C.
-----
950デフォルトの名無しさん
2019/01/09(水) 03:54:07.58ID:bacokaDQ
フォルダの中身を列挙再帰するのって1回で1階層しか見れなくてIOモナドぶっかけられるから
1関数の中のwhereの中で回すしかない感じですかね?
951デフォルトの名無しさん
2019/01/09(水) 06:47:34.41ID:SOqsE/HW
数学の教科書「関数の中・・?・・スコープ・・?」
952デフォルトの名無しさん
2019/01/09(水) 16:57:29.61
数学は無限に高速なCPU、無限に使えるメモリを前提として処理を議論する
953デフォルトの名無しさん
2019/01/09(水) 19:12:59.65ID:Me/cgKlM
なんだ高卒か
954デフォルトの名無しさん
2019/01/09(水) 19:19:36.45ID:vBKfOHsm
時間を考慮に入れないなら高速である必要すらない
955943
2019/01/14(月) 00:22:49.99ID:O/Nk4r6k
>>945 >>944
ありがとうございます。
コード読む時に使わせて頂きます・
956デフォルトの名無しさん
2019/01/14(月) 01:01:35.99ID:oPHKHfrN
944は心理か何かか?俺には理解出来んw
957デフォルトの名無しさん
2019/01/14(月) 10:58:12.74ID:hZswZX0S
>>950
質問の意味がよく分からないが、
where じゃなくても、自分自身を再帰的に呼べばいいのでは?

directories :: FilePath -> [FilePath]
という型の関数を定義して、その中で、
1. 引数で渡されたパス内のコンテンツを列挙
2. そのうち、ディレクトリであるものを抽出
3. それらに directories 関数を適用
4. 1 と 3 の結果を結合して return

これじゃダメ?
958デフォルトの名無しさん
2019/01/14(月) 14:48:46.72ID:hZswZX0S
>>957
シグネチャを間違えた

directiries :: FilePath -> IO [FilePath]
959デフォルトの名無しさん
2019/01/14(月) 16:11:26.66ID:tN6VIVTj
-- ほげ :: FilePath -> IO (Bool, [FilePath])
(d, paths) <- ほげ path
if d then foldr (>>) (return ()) $ map 再帰 paths
else ふが
960デフォルトの名無しさん
2019/01/15(火) 19:39:53.51ID:bDKJ3jpf
ディープラーニング用ライブラリ grenade を使ってみようと思いましたが、
依存関係のせいで stack でパッケージをインストールできず困っています。

grenade は stackage には無いので stack プロジェクトの stack.yaml ファイルに
必要なパッケージを書き加えました。

extra-deps:
- grenade-0.1.0
- containers-0.5.11.0
- exceptions-0.8.3
- hmatrix-0.18.2.0
- singletons-2.2
- th-desugar-1.6
- template-haskell-2.11.1.0

しかし依存関係が解消されません。
template-haskell が問題を起こしているようです。

exceptions-0.8.3 が template-haskell の >=2.2 && <2.14 を必要とし、
th-desugar-1.6 が同じ template-haskell の <2.12 を必要としています。

よって、template-haskell-2.11.1.0 は両方の条件を満たすと思うのですが、依存関係のエラーが出ます。
しかも、なぜか template-haskell-2.13.0.0 を extra-deps に加えろと推奨されます。

試しに template-haskell-2.13.0.0 を extra-deps に記述してみましたが、
2.11.1.0 の時と全く同じエラーが出ます。
(相変わらず 2.13.0.0 を追加しろと推奨されます)

何が問題なのでしょうか?


stack のバージョンは 1.7.1 です。
961デフォルトの名無しさん
2019/01/15(火) 19:48:20.12ID:URfldHzA
ディープラーニングにHaskellを使おうとしていることが問題
962デフォルトの名無しさん
2019/01/15(火) 23:33:41.05ID:fNWkI4iJ
>>960
>>=2.2 && <2.14
963デフォルトの名無しさん
2019/01/16(水) 00:57:57.45ID:Rf1WUy5G
>>960
stack.yaml で指定している resolver のバージョンはいくつ?

自分は stack が 1.9.3 で resolver: lts-12.26 で試してみたが、
template-haskell-2.13.0.0 from stack configuration does not match...
というエラーが出た。 lts-12.26 が 2.13.0.0 を要求しているためのようだ。
それで resolver を、2.11.1.0 を要求する lts-9.21 に落としてやってみたら依存の解決はできた。
(その後にリンクエラーになってしまったがこれは別の問題だと思う…https://github.com/commercialhaskell/stack/issues/3487 と同じっぽい)
964デフォルトの名無しさん
2019/01/16(水) 17:48:25.37ID:f7x8T+kZ
>>962
ごめんなさい、何を指摘されているのか分かりませんでした。

>>963
私は lts-13.3 でやっていました。
指摘通り 9.21 でやってみたところ、問題なくビルドできました。
grenade の githab にある example も動きました。
( 言い忘れていましたが OS は archlimux です)


また、指摘から hackage ではなく githab から grenade のプロジェクトをクローンし、
最新の lts-13.3 でビルドしてみる事を思いつきました。
試したら、こちらも問題なくできました。
想定されてる ghc のバージョンが違うのでそのままではコンパイルエラーが出ますが、
ソースを多少改変したら動きました。

お陰様で作業を進められそうです。
ありがとうございました。
965デフォルトの名無しさん
2019/01/17(木) 21:37:06.39ID:R/7pNsew
cabal new-ナントカ
を日本語で解説してほしい
966デフォルトの名無しさん
2019/01/19(土) 10:09:04.13ID:XQ+5XzTr
>>961
> ディープラーニングにHaskellを使おうとしていることが問題

>>960 です。
いや、実用を考えているわけではないです。
haskell 大好きなので、以前 python でやったことを haskell でもできないかと。
ただの遊びです。

ただ、実際 haskell で CartPole が上手くいった画面を見ると感動しました。
物理演算も haskell ライブラリなので python の gym とは違いますが。
(gym-http-api パッケージがなぜか動かないので)

使った主なパッケージは、
学習用
 apecs
 apecs-physics
 grenade
確認用 (アニメーション)
 apecs
 apecs-gloss
 gloss
です。
あとは細々としたものを幾つか。
967sage
2019/01/19(土) 21:02:03.11ID:K21HdJ2L
Haskellの「->」という記号の読み方はありますか?
他のプログラミング言語だと「->」には「アロー演算子」という名前が付けられていますが、Haskellの場合は何という名前なのでしょうか?
968デフォルトの名無しさん
2019/01/19(土) 22:34:36.32ID:nurYb0Ef
>>967
型における(->)の英語での読み方は>>839 によると、toもしくはarrow
969デフォルトの名無しさん
2019/01/20(日) 14:28:23.05ID:J4e1TPCS
data T = D { f :: Int -> Int }
という型があったら、関数 f の実際の型は T -> Int -> Int だよね。

で、この関数 f の中で、引数として渡されたT 型の値にアクセスする方法って無いかな?

g :: T -> Int -> Int って型の関数を作っても、
D { f = g } なんてできないよね。
h :: Int -> Int なら D { f = h } はできる。
970デフォルトの名無しさん
2019/01/20(日) 19:41:43.18ID:xPUxeMcd
data D = D { f :: Int -> Int, x :: Int }
g d y = x d + y
d = D { f = g d, x = 1 }
f d 1 == 2
とか?
971デフォルトの名無しさん
2019/01/21(月) 21:42:26.44ID:xU0cTMEl
GHC(Haskell)の上流リポジトリ等がGitLabに移行しました 2019年01月20日
https://qiita.com/takenobu-hs/items/a2eeb327088bb1d2fe77
972デフォルトの名無しさん
2019/01/22(火) 18:35:04.27ID:Lbcg1DYs
>>970
なるほど、頭いいな。
採用させてもらうよ。
ありがとう。
973デフォルトの名無しさん
2019/01/23(水) 00:07:49.58ID:UhkibQh6
既出かも知れませんが
「 木 (tree) 」の読み方について質問です。

化学では「塩」をシオではなくエンと読む様に
「 木 」もモクやボクと読むのか
訓読みでキと読むのか確認したいです。
974デフォルトの名無しさん
2019/01/23(水) 00:12:29.03ID:e48tmJNP
>>973

https://ja.wikipedia.org/wiki/%E6%9C%A8%E6%A7%8B%E9%80%A0_(%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0)
https://ja.wikipedia.org/wiki/%E6%9C%A8_(%E6%95%B0%E5%AD%A6)
975デフォルトの名無しさん
2019/01/23(水) 00:18:53.14ID:UhkibQh6
>>974
了解です。
薔薇木をバラキと読むのに違和感があったので
確認してみたかったです。
976デフォルトの名無しさん
2019/01/23(水) 00:19:35.51ID:Ysgk2cll
その質問は既出じゃないと思う
977デフォルトの名無しさん
2019/01/23(水) 00:27:46.89ID:UhkibQh6
そうでしたか。

しかし良く考えてみたら
薔薇木(ばらぼく)って同性愛雑誌みたいでした。
978デフォルトの名無しさん
2019/01/23(水) 12:32:21.82ID:8dbvKkbn
薔薇刑 ← 読めない
979デフォルトの名無しさん
2019/01/23(水) 15:57:01.39ID:I7vJASel
葉は
枝えだ
木き
根ね
980デフォルトの名無しさん
2019/01/23(水) 16:07:41.36ID:OFN8YGgg
男根おとこね
981デフォルトの名無しさん
2019/01/24(木) 00:53:14.43ID:cVpDBcbd
kotlin以下w
kotlinってあれだろ鳥箱の中で争わせて、強いものが… キャー

【IT】習得したいプログラミング言語、したくない言語 プログラミング言語実態調査 2018
https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00501/111200004/
982デフォルトの名無しさん
2019/01/24(木) 10:45:53.06ID:TePOwsZ1
擬人化してくれ
983デフォルトの名無しさん
2019/01/24(木) 17:57:50.91
Haskell は初期学習コストが高すぎるのと、圏論イキリおじさんが煙に巻くので近寄りがたい雰囲気を醸している
984デフォルトの名無しさん
2019/01/24(木) 18:25:57.35ID:wii/ewut
ちょっと勉強したけど、なんか仕様がコロコロ変わってるような気がして、
本格的に手を出しにくい
985デフォルトの名無しさん
2019/01/24(木) 18:27:39.45ID:tqh7mtUe
mtl パッケージの Control.Monad.Reader モジュールで MonadReader クラスが定義されています。

この定義で、なぜ m -> r などという制約が課せられているのでしょうか。

class Monad m => MonadReader r m | m -> r where

この制約がないと何が不都合なのでしょうか。
986デフォルトの名無しさん
2019/01/24(木) 23:18:18.45ID:9BqsZZXL
関数従属を消すとコンパイルが通らなくなる例
https://ideone.com/sdajAE

具体的には instance Monad m => MonadReader r (ReaderT r m) の他に
instance Monad m => MonadReader () (ReaderT r m) もあり得るから
MonadReaderに関数従属がないとReaderTの型クラスのようには扱えない
987デフォルトの名無しさん
2019/01/25(金) 00:43:33.65
m → r
mを決めると自動的にrも決まるという意味だろうか
いまモナドを、ReaderT r m と決めた
だからそこで使われる r が自動的にMonadReader r 〜の r となるのだ

このように素人目に推測できる
988デフォルトの名無しさん
2019/01/25(金) 08:16:02.28ID:iIPgsGqp
>>983
モナド使うだけなら圏論要らんけどな。
自作するなら圏論要るけど、それはHaskellが難しいんじゃなくて圏論(とか数学)が難しいだけで。
自作しないでただのプログラミング言語として使う分には難しくない。
(どこまで抽象化できるか研究してる人が多いから難しく感じるだけ)

>>=演算子はモナドを受け取ってモナドを返す演算子と覚えておけば良い。
(だからモナド受け取って、モナドの中の値を取り出して処理したらreturnでモナドに包むか、モナド返す関数に引数として渡す)

returnとかclassとか、普通の言語にも同じ用語が出るからって、同じ意味と考えないほうがいい。
まっさらな頭で挑むべし。
(そういう意味で初心者の方が理解が早い)
989デフォルトの名無しさん
2019/01/25(金) 18:42:51.74ID:sjWwXpoO
>>986
例は理解できました。
話も、

> 具体的には instance Monad m => MonadReader r (ReaderT r m) の他に
> instance Monad m => MonadReader () (ReaderT r m) もあり得るから

ここまでは理解できたのですが、

> MonadReaderに関数従属がないとReaderTの型クラスのようには扱えない

ごめんなさい、この意味がまだよく分かりません。

MonadReaderに関数従属がないと、
ReaderT型がMonadReaderクラスのインスタンスとして定義できない、
という事でしょうか。
990デフォルトの名無しさん
2019/01/25(金) 20:09:29.73ID:RwHnV4/s
C++のtemplateのような制約がないダックタイピングに不都合を実感した者は理解が早い
初心者より早い
991デフォルトの名無しさん
2019/01/25(金) 20:13:55.21ID:DHFZGKPe
>>989
型推論において instance Monad m => MonadReader (ReaderT r m) のように扱えると言いたかっただけです
上のコードが意味することを言い換えたつもりだったんですが
言葉としては Monad m => ReaderT r m をMonadReaderのインスタンスのように扱える
とした方が正しかったですね
992デフォルトの名無しさん
2019/01/26(土) 19:27:32.21ID:2lj1Pdko
>>991
言葉としては Monad m => ReaderT r m をMonadReaderのインスタンスのように扱える
> とした方が正しかったですね

まだよく分からないです。

これは、関数従属があるからこそ Monad m => ReaderT r m をMonadReaderのインスタンスのように扱える、
ということですよね。

逆に言えば、関数従属がないとそのそうにできない、と。

試しに MonadReader クラスと ReaderT 型を mtl のソースと同じように自作してみました。
(あれは実質 transfirmers の re-export なので、tranformers のソースのように、が正しいですが)

すると、MonadReader クラスの関数従属がなくても、
ReaderT 型を MonadReader クラスのインスタンスにできてしまいました。
エラーなくビルドでき、同じように使うことができました。

どういうことでしょうか。

コンパイラは ghc-8.6.3 です。
993デフォルトの名無しさん
2019/01/26(土) 20:36:51.56ID:YCYcr/Gx
>>992
instance Monad m => MonadReader r (ReaderT r m)
この場合インスタンスなのは r と Monad m => ReaderT r m の組み合わせだと理解しているんですが
いずれにしても言いたかったのは前の方の r を無視して扱えるようになるということで
なにか間違ってるようなら忘れてもらって構わないです
994デフォルトの名無しさん
2019/01/27(日) 14:38:45.77ID:joZtszNb
UndecidableInstancesだからでは?
自分も理解しきれてないけど
995デフォルトの名無しさん
2019/01/27(日) 20:30:51.01ID:wGWJPOk3
質問ではなく否定ができる者は理解が早い
どういうことでしょうか、ではなく、ここが間違っているのを知ってる俺は正しい
その方が圧倒的に早い
996デフォルトの名無しさん
2019/01/28(月) 02:18:47.10ID:UwyAz0OY
すいません。
初心者でこんなこと聞くのもお恥ずかしいんですが、なにをどうググっても情報がでてこないのでお聞きします。
いま話題になってる>>985さんの

class Monad m => MonadReader r m | m -> r where

が全く意味すらわかりません。

“class” が型class を定義する宣言で
“Monad m” が “m は Monad のインスタンスであるときに”

を意味してるんですよね?
そのとき “型 MonadReader r m” が定義されるという風に読めばいいんですよね?
で、その後の

“| m -> r”

がわかりません。
>>985さんは
>この定義で、なぜ m -> r などという制約が課せられているのでしょうか。

と言われてますが、”制約” とはなんですか?
こんな質問して話の腰を折ってはいけないとなんとか自力でググりまくったんですが全くこの記述の意味を理解する情報を発見することはできませんでした。
載っている参考文献でも結構ですのでどなたか教えていただけませんか?
997デフォルトの名無しさん
2019/01/28(月) 12:06:40.91ID:kUDYAe70
http://www.kotha.net/ghcguide_ja/latest/type-class-extensions.html#functional-dependencies
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#functional-dependencies
https://github.com/shiatsumat/wiwinwlh-jp/wiki/%E5%9E%8B%E6%97%8F
998デフォルトの名無しさん
2019/01/28(月) 12:15:36.89ID:LeZdguT6
>>996
私が元の質問者ですが、気にしないで質問なさってください。

>> を意味してるんですよね?

ここまでは良いと思いますが、

>> そのとき “型 MonadReader r m” が定義>> されるという風に読めばいいんですよね?

違います。
定義しているのは型ではなく型クラスです(細かいですが大事なところなので)。

それと | m -> r は、>>986 でもチラッと名前が出てきましたが、日本語では「関数従属」です。
「haskell 関数従属」でググるとでてきます。

簡単に言えば、| m -> r はこのクラスのインスタンス型において、
型変数 m の型が具体的に決まれば、型変数 r の具体的な型が「一意に」推論できなければならない、
という制約です。

例えば class TTT a b | a -> b という宣言があると、
TTT Int String というインスタンス型と TTT Int Double というインスタンス型は「同時には」存在できません。
a の型が Int なのに、b の型が String の場合のインスタンス型も Double の場合のインスタンス型も定義されているからです。

逆に、TTT String Int と TTT Double Int はOKです。
関数従属になんら違反していません。

| x -> y の x と y の並び順番に気をつけてください。
999デフォルトの名無しさん
2019/01/28(月) 12:17:56.53ID:H3y/QtCH
すみません質問いいですか?
1000デフォルトの名無しさん
2019/01/28(月) 12:39:33.26ID:MTZ0KVk9
いいよ
ニューススポーツなんでも実況



lud20251101082346ca
このスレへの固定リンク: http://5chb.net/r/tech/1506447188/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「関数型プログラミング言語Haskell Part31©2ch.net ->画像>6枚 」を見た人も見ています:
【Switch】eBASEBALLプロ野球スピリッツ2021 グランドスラム Part4
C++の後継を目指すプログラミング言語「Carbon Language」がGoogleによって公開される
C、Python、R、Rubyの全ての長所を取り込んだ最強のプログラミング言語「Julia」がいま成長中
プログラミング言語別 平均年収ランキング 1位 Scala 2位 Python 3位 Kotlin 4位 Swift
プログラミングのお題スレ Part9
プログラミングのお題スレ Part13
プログラミング言語 Scala 12冊目
就職に強いプログラミング言語ってある?
プログラミング言語の人気ランキング
eBASEBALLパワフルプロ野球2022 Part4
eBASEBALLパワフルプロ野球2020 Part20
結局人気の高いプログラミング言語ってなに?
お前らプログラミング言語どうやって覚えたんや?
あなたが好きな「プログラミング言語」はどれ?
MS「Excelが世界No1の完全なプログラミング言語」
【LGA2011-v3】Haswell-E Part16【Socket R3】
eBASEBALLパワフルプロ野球2020栄冠ナイン専用スレ Part7
eBASEBALLパワフルプロ野球2020栄冠ナイン専用スレ Part53
eBASEBALLパワフルプロ野球2020栄冠ナイン専用スレ Part45
eBASEBALLパワフルプロ野球2020栄冠ナイン専用スレ Part29
2020年版プログラミング言語ランキング 3位に「C」2位に「Java」1位は
【IT】プログラミング言語「ルビー」、島根のIT潤す 誕生25年へ
【IT】2019年版「最初に学ぶにはふさわしくないプログラミング言語」リスト
【IT】プログラミング言語人気ランキング2020、2位に「大躍進」したあの言語
【PS4/Switch】 eBASEBALLパワフルプロ野球2020 マイライフ専用スレ Part13
【IT】Apple、新プログラミング言語「Swift」をアプリ開発用に提供 開発者は驚き[6/5]
ホワイトハウスが開発者に対しRustなどのメモリ安全性に優れたプログラミング言語への移行を勧め始める、まだCやC++使ってる奴おりゅ?
【天才】スーパー中学生誕生、プログラミング言語わずか数週間で開発、U-22プログラミング・コンテスト2019 ★4
【ADIDAS】Yeezy イージー part39【NIKE】
【KOFAS】THE KING OF FIGHTERS ALLSTAR part318
【KOFAS】THE KING OF FIGHTERS ALLSTAR part343
【KOFAS】THE KING OF FIGHTERS ALLSTAR part301
【ラスバレ】アサルトリリィ Last Bullet Part328
【ラスバレ】アサルトリリィ Last Bullet Part367
【ラスバレ】アサルトリリィ Last Bullet Part371
【ラスバレ】アサルトリリィ Last Bullet Part309
【FF7R】FINAL FANTASY VII REMAKE part368【リメイク】
【FF7R】FINAL FANTASY VII REMAKE part331【リメイク】
【FF7R】FINAL FANTASY VII REMAKE part340【リメイク】
【FF7R】FINAL FANTASY VII REMAKE part336【リメイク】
【PS4】FINAL FANTASY VII REMAKE part31【FF7リメイク】
eBASEBALLパワフルプロ野球2020栄冠ナインモード専用スレPart.30
【IT】プログラミングスクール卒業生は現場で使えない [Stargazer★]
プログラミング業界に異変、SwiftとJavaが不人気、スマホアプリ開発までJavaScriptという時代に
Like Nastya part1
LAST ALLIANCE Part27
ASUS ROG ALLYについて語ろう Part6
【XB/PS】Wo Long: Fallen Dynasty part4
【ADIDAS】Yeezy イージー part17【NIKE】
【Supercell】Clash Royale part79【クラロワ】
【Supercell】Clash Royale Part410【クラロワ】
【KOFAS】THE KING OF FIGHTERS ALLSTAR part269
【ラスバレ】アサルトリリィ Last Bullet Part43
【ラスバレ】アサルトリリィ Last Bullet Part64
【KOFAS】THE KING OF FIGHTERS ALLSTAR part292
【Supercell】Clash Royale part153【クラロワ】
【Supercell】Clash Royale part159【クラロワ】
【ラスバレ】アサルトリリィ Last Bullet Part41
【KOFAS】THE KING OF FIGHTERS ALLSTAR part204
【ラスバレ】アサルトリリィ Last Bullet Part509
【KOFAS】THE KING OF FIGHTERS ALLSTAR part244
【KOFAS】THE KING OF FIGHTERS ALLSTAR part126
【KOFAS】THE KING OF FIGHTERS ALLSTAR part240
【Supercell】Clash Royale part250【クラロワ】
【ラスバレ】アサルトリリィ Last Bullet Part416
【KOFAS】THE KING OF FIGHTERS ALLSTAR part172
18:36:52 up 21 days, 9:58, 4 users, load average: 30.51, 55.03, 61.85

in 2.4844541549683 sec @[email protected] on 111308