2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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

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

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

前スレ
関数型プログラミング言語Haskell Part30
http://mevius.2ch.net/test/read.cgi/tech/1484491434/

2 :デフォルトの名無しさん :2017/09/27(水) 02:33:55.41 ID:2XAqPuH2.net
過去スレ一覧
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 :関連サイト :2017/09/27(水) 02:35:40.58 ID:2XAqPuH2.net
(英語)
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.63 ID:G9HkNsFz.net
いちおつ

5 :デフォルトの名無しさん:2017/09/27(水) 08:45:48.68 ID:l2Dkh0U/.net
質問させてください
Stringの配列xsを1つの要素につき1行ずつ画面に出力する場合、
mapM_ putStrLn xs

putStr.unlines $ xs
ならどちらの方がいいのでしょうか?

6 :デフォルトの名無しさん:2017/09/27(水) 11:20:36.98 ID:3YTsdy+/.net
https://ideone.com/hreKZz
前スレの分割集合のアルゴリズムをdp風にしてみたけど
結局リストを作るコストは同じだからむしろ遅くなったわ

7 :デフォルトの名無しさん:2017/09/27(水) 12:38:35.89 ID:e62g5PUw.net
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.03 ID:Ig4f10A7.net
日本人の書くHaskell本は入門書ばっか。
ダメとは言わんが、バラエティーがないね。

9 :デフォルトの名無しさん:2017/09/27(水) 18:15:22.14 ID:fINvBrSj.net
だって関数プログラミングについて深い内容を書けるだけの知識と見識のある人間なんて日本にはいない
実務家も大学の先生もね

10 :デフォルトの名無しさん:2017/09/27(水) 19:01:25.65 ID:duTWzj9f.net
誰か、競プロを生き抜くためのHaskell TipsをKindle出版してくれ
できればUnlimited 対応で

11 :デフォルトの名無しさん:2017/09/27(水) 21:13:41.99 ID:A4sTCCrj.net
英語で構わないので中級者向けの書籍教えて

12 :デフォルトの名無しさん:2017/09/27(水) 21:45:25.22 ID:Ys6dXTpa.net
>>10
haskell-masterことtanakh大先生に頼むしかないな

13 :デフォルトの名無しさん:2017/09/27(水) 22:52:12.73 ID:vJ1/ghVi.net
Glorious haskell-master tanakh is crazy about Rust these days.

14 :デフォルトの名無しさん:2017/09/27(水) 23:06:21.04 ID:GBvrW/PZ.net
>>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.14 ID:z5y5Aaws.net
>>14
ありがとう!参考になりました

16 :デフォルトの名無しさん:2017/09/28(木) 14:01:26.19 ID:UK21Udq4.net
ああ逃れられない(英語)

17 :デフォルトの名無しさん:2017/09/28(木) 21:10:48.47 ID:6lr8pJs9.net
新しくでたHaskell本、田舎に住んでる自分的にはいい感じだわ。
著者の方をみると、東京とかの勉強会はこの辺を踏まえてるんだなと勝手に思ってる。
周りにHaskellerがおらず独りでやってるけど、実践的な面で何か取りこぼしがないかとの疑問が頭に残ってたから、これで安心。

18 :デフォルトの名無しさん:2017/09/28(木) 21:21:59.50 ID:WvuzNAMn.net
明日給料入るから明日買うわ

19 :デフォルトの名無しさん:2017/09/28(木) 21:30:11.00 ID:Oc+ilhlL.net
>>17
章末問題とか練習問題みたいなのある?

20 :デフォルトの名無しさん:2017/09/28(木) 21:30:19.44 ID:DWFu7WOr.net
例えば、undefinedをAgdaのホールみたいに使えるとか知らんかった。

21 :デフォルトの名無しさん:2017/09/28(木) 21:33:24.87 ID:hwFo+CWc.net
実際何か作ろうとなったときに今どのライブラリでどう作ればいいかの道筋を示す本はないから
そこをわかって出してくれてそうな今回の入門書に期待

22 :デフォルトの名無しさん:2017/09/28(木) 21:39:17.72 ID:DWFu7WOr.net
>>19
ないね。
理論的な部分はこれまでの良書で固めて、
上で書いたような、俗っぽい(悪い意味ではない)部分を補充、といった感じかと。

23 :デフォルトの名無しさん:2017/09/28(木) 22:29:11.61 ID:Ivu9Y1Xk.net
ところで、今Webアプリってブームなの?
みんなWebアプリを作りたくてウズウズしてんの?

24 :デフォルトの名無しさん:2017/09/28(木) 23:01:35.48 .net
ゲーム作るならFRPなの?
どのパッケージがいいの? ヘルムって奴?
それ以前にFRPってどこで勉強すればいいの?

25 :デフォルトの名無しさん:2017/09/28(木) 23:10:45.38 ID:hwFo+CWc.net
Elm、FRPやめたってよ
FRPと関数型のことは忘れろ

26 :デフォルトの名無しさん:2017/09/28(木) 23:22:12.38 ID:64lLKNQd.net
Functional Reactive Programming - HaskellWiki
https://wiki.haskell.org/Functional_Reactive_Programming

27 :デフォルトの名無しさん:2017/09/29(金) 00:09:31.41 .net
えええ。。。じゃあHaskellでゲームって、なんのライブラリ使って作るの

28 :デフォルトの名無しさん:2017/09/29(金) 00:22:48.95 ID:6ZguHByP.net
自分で作ってみるのはどうでしょうか?
良いライブラリができたら公開してね!!

29 :デフォルトの名無しさん:2017/09/29(金) 00:41:18.81 ID:Q5+RKusc.net
Game Development - HaskellWiki
https://wiki.haskell.org/Game_Development

30 :デフォルトの名無しさん:2017/09/29(金) 00:43:06.66 ID:Q5+RKusc.net
Applications and libraries/Games - HaskellWiki
https://wiki.haskell.org/Applications_and_libraries/Games

31 :デフォルトの名無しさん:2017/09/29(金) 22:18:38.06 ID:8tJM6rkq.net
HaskellによるゲームプログラミングにFRPを使うメリットがない。

32 :デフォルトの名無しさん:2017/09/29(金) 22:52:40.90 ID:7WUGaaf4.net
みんなhaskellで何するの?
haskellのためのhaskellしてるみたいなイメージ

33 :デフォルトの名無しさん:2017/09/30(土) 00:36:23.25 ID:rwsxidmc.net
自分の要求に応えてくれる言語を使ってるだけだよ

34 :デフォルトの名無しさん:2017/09/30(土) 04:13:52.83 ID:F2cNQzRT.net
stackがあればハスケルコンパイラーインストール必要ないんやな。
全部消してやったぜ。

35 :デフォルトの名無しさん:2017/09/30(土) 22:19:25.30 ID:zP5U//5z.net
神様ありがとう、ハスケルに会わせてくれて
君は眠っていたね

36 :デフォルトの名無しさん:2017/09/30(土) 22:52:16.35 ID:m5JakNDN.net
>>32
C言語の倒し方を発見する
またはC言語を倒せないことを証明する

37 :デフォルトの名無しさん:2017/09/30(土) 23:59:21.19 ID:VwrUR3UB.net
>>32
あえて言おう
自分自身の処理系を記述できない処理系はクソ

38 :デフォルトの名無しさん:2017/10/01(日) 11:01:26.12 ID:evM2u7Ti.net
Eq クラスや Show クラスのように default deriving として使えるクラスを自作することはできますか?

39 :デフォルトの名無しさん:2017/10/01(日) 12:00:16.69 ID:QSpmDYPw.net
>>38
14の本に書いてあった気がする

40 :デフォルトの名無しさん:2017/10/01(日) 13:29:55.56 ID:00V/3sY4.net
Haskellによる関数プログラミングの思考法
Richard Bird (著), 山下伸夫 (翻訳)
https://www.amazon.co.jp/dp/4048930532/

この本ていいの?
すぐ教えろ

41 :デフォルトの名無しさん:2017/10/01(日) 15:15:55.43 ID:hswT9xjT.net
C++ Rust Haskellは言語とライブラリを見るだけで楽しめるが
言語とライブラリはすぐ古くなるのがこわくて手を出せないやつが多いんだろうね

42 :デフォルトの名無しさん:2017/10/01(日) 15:37:36.06 ID:sFjMHcln.net
待ってくれ

43 :デフォルトの名無しさん:2017/10/01(日) 15:52:51.93 ID:evM2u7Ti.net
>>39
ありがとうございます。
その本を借りてみます。

44 :デフォルトの名無しさん:2017/10/01(日) 18:25:15.52 ID:sFjMHcln.net
ああ逃れられない(英語)

45 :デフォルトの名無しさん:2017/10/01(日) 19:09:32.63 ID:rx6vco2K.net
>>40
「関数プログラミング 珠玉のアルゴリズムデザイン」のための良い入門書って感じ

46 :デフォルトの名無しさん:2017/10/01(日) 19:34:05.63 ID:sFjMHcln.net
珠玉難しすぎんよ〜

47 :デフォルトの名無しさん:2017/10/01(日) 20:13:16.82 ID:O7TiEQTZ.net
珠玉は本気で難しい

48 :デフォルトの名無しさん:2017/10/01(日) 23:00:51.17 ID:iMMA7lvE.net
>>12
tanakhはもうダメになった
https://twitter.com/tanakh/status/914454692440064000

49 :デフォルトの名無しさん:2017/10/02(月) 02:38:46.64 ID:y6gYscpA.net
平常運転

50 :デフォルトの名無しさん:2017/10/02(月) 20:30:12.49 ID:k+Xmo3sE.net
平壌運転

51 :デフォルトの名無しさん:2017/10/04(水) 19:37:39.13 ID:F2K4hXU2.net
REPLでlet文ごっそり複数行貼れるんだね。
ちまちま一行ずつコピペしててバカみたいだったww
自分みたいなアホはあまりいないと思うけど、一応の注意喚起。

52 :デフォルトの名無しさん:2017/10/04(水) 22:05:05.88 ID:oKe3mPnb.net
replというかコマンドラインの性質・・・

53 :デフォルトの名無しさん:2017/10/08(日) 22:00:05.12 ID:JB+KF/At.net
Data.MapのfromListとtoListはキーが例えば自然数なら自動で昇順になるのですか?
確実を期すのであればfromAscListやtoAscListを使うべきですか?

54 :デフォルトの名無しさん:2017/10/08(日) 23:24:05.25 ID:Zx8XGEkD.net
わざわざ別に作ってあるってことはそうやろなぁ

55 :デフォルトの名無しさん:2017/10/09(月) 07:02:48.85 ID:xS+J1z7K.net
Functional Pearl って何? 自分で名乗ってもいいの?

56 :デフォルトの名無しさん:2017/10/10(火) 06:54:46.17 ID:j0DthWV+.net
vectorパッケージでリスト内包表記的なのってありますかね?
また、ああいうsyntax sugarてユーザーが定義できるんでしょうか?

57 :デフォルトの名無しさん:2017/10/10(火) 07:19:08.32 ID:IE9ZixgD.net
monad comprehensions

58 :デフォルトの名無しさん:2017/10/10(火) 10:01:50.47 ID:j0DthWV+.net
>>57
ありがとうございました、見てみます。

59 :デフォルトの名無しさん:2017/10/15(日) 08:27:10.18 ID:3zXjO+sA.net
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.06 ID:amy6Q4J2.net
Just 10 >>= (\x -> return (x + 1) >>= (\y -> return (x + y + 2))

61 :デフォルトの名無しさん:2017/10/15(日) 18:23:23.93 ID:amy6Q4J2.net
do
 x <- Just 10
 y <- return (x + 1)
 return (x + y + 2)



Just 23

62 :デフォルトの名無しさん:2017/10/15(日) 21:17:59.15 ID:QaXk2fzN.net
カッコで括らない限りラムダ式のリテラルを使うとそれ以降はラムダ式の内側になるから
bindというか演算子に限らずa+\x->x+bみたいなのはa+(\x->x+b)

63 :デフォルトの名無しさん:2017/10/15(日) 21:42:24.61 ID:Fr3WOscB.net
letやcaseはあまり使わないほうが推奨なんですか?

これに書いてあったので
http://d.hatena.ne.jp/kazu-yamamoto/20110826/1314352340

64 :デフォルトの名無しさん:2017/10/15(日) 21:44:11.18 ID:QaXk2fzN.net
>>62
演算子の種類に限らず

65 :デフォルトの名無しさん:2017/10/15(日) 22:04:25.31 ID:pVUBwS6g.net
>>63
好き好きでいいと思う。

66 :デフォルトの名無しさん:2017/10/15(日) 22:56:15.07 ID:GYZBU1+2.net
>>63
let と where を同時に使わない、さえ守ればまあ。

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

ちなみにcaseを使わないでパターンガードで書くと
ガードをまたげる where の方が書きやすいので
個人的にはまさにcaseもletも使わない

67 :デフォルトの名無しさん:2017/10/15(日) 23:23:28.47 ID:E5HePsK2.net
使う意味がわからない
局所的なスコープの中だから式でないと書けないでもなければ使わない

68 :デフォルトの名無しさん:2017/10/15(日) 23:33:15.58 ID:c/qV5Afw.net
>>66
いいこときいた!

69 :デフォルトの名無しさん:2017/10/16(月) 00:02:00.30 ID:TY5gTDK1.net
値ならlet、関数ならwhereみたいな使い分けしてるわ
両方混ざることもしばしば
caseもdo構文の中とかで普通に使わね?

70 :デフォルトの名無しさん:2017/10/16(月) 03:01:45.14 ID:Nb+0WxCX.net
左上から順番に読んで引っかかる時はlet使うかな。パターンガードはwhere一択だね。

baseパッケージを雑に調べたんだけど、総数はそれぞれ
where: 2038
let: 665
case: 979

71 :デフォルトの名無しさん:2017/10/16(月) 18:36:49.72 ID:oTRCGw1x.net
そして余計な宗教戦争へ発展

72 :デフォルトの名無しさん:2017/10/16(月) 21:17:09.38 ID:UKE6NQTo.net
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.25 ID:Nb+0WxCX.net
宗教で思い出したんだけど、みんなエディタは何使ってる?

https://github.com/rainbyte/haskell-ide-chart
Atom派が増えてきた気がする(Stepwise Debuggerってなんだろう)。

74 :デフォルトの名無しさん:2017/10/16(月) 23:03:58.10 ID:wsZRBdk3.net
vscode+hie

75 :デフォルトの名無しさん:2017/10/16(月) 23:06:05.01 ID:1r/tGA5g.net
vscodeいいよな
他の言語でも大活躍

76 :デフォルトの名無しさん:2017/10/16(月) 23:09:52.45 ID:wsZRBdk3.net
vimのlanguage server対応がもっと進んだらvimに戻りたい

77 :デフォルトの名無しさん:2017/10/16(月) 23:13:43.26 ID:RTfo5Gm3.net
https://wiki.haskell.org/Let_vs._Where#Problems_with_where
これ前者はクロージャみたいなものということなのかな

78 :デフォルトの名無しさん:2017/10/17(火) 01:54:05.70 ID:kmqw2VEi.net
spacemacs + intero

79 :デフォルトの名無しさん:2017/10/17(火) 06:46:01.60 ID:X7yOqbnN.net
HIE知らんかった。試してみよう。
自分もSpacemacsだわ。

80 :デフォルトの名無しさん:2017/10/17(火) 08:53:48.72 ID:NQL+y7y0.net
プログラミングに限らず、およそ文字列を編集する作業において、
vim以外のエディタは考えられない体になってしまった。

81 :デフォルトの名無しさん:2017/10/17(火) 10:17:04.48 ID:1Byit6P4.net
vscodeはvimがクソなのがな

82 :デフォルトの名無しさん:2017/10/17(火) 20:53:20.25 ID:FkVJ0QE/.net
タイプミスが多いのでキー入力コマンド操作とか誤操作ばかりで死ぬ

83 :デフォルトの名無しさん:2017/10/17(火) 21:34:05.58 ID:lwYxKvg3.net
CoqとかAgdaもやろうとしてたからEmacs一択で、
Vimの操作性も習得したいと思ってたから結果的にSpacemacsに落ち着いたわ。

84 :デフォルトの名無しさん:2017/10/17(火) 21:45:06.92 ID:dWslrgIK.net
Spacemacs知れようとして、Emacsのバージョン足りなくて死んだ

85 :デフォルトの名無しさん:2017/10/17(火) 21:48:15.65 ID:kmqw2VEi.net
静的どころか参照透明なんだし、補完は充実してほしいよなあ。

data Pen = Pineapple | Apple
apple = Apple
pen :: Pen
pen = a
もうこの時点で候補をappleに絞ってほしい。

86 :デフォルトの名無しさん:2017/10/17(火) 22:31:12.09 ID:Is39GLXq.net
異教徒間の鍔迫り合いが始まる予感です?

87 :デフォルトの名無しさん:2017/10/17(火) 22:46:49.54 ID:bTvRRU/M.net
そんな「絞り込み」はそもそもできないしすべきでもない
そもそもその例の場合なら完全に redundant だとしてむしろ積極的にappleを除外してほしい

88 :デフォルトの名無しさん:2017/10/17(火) 22:58:58.88 ID:kmqw2VEi.net
>>87
できそうな気がするけど。
…-> Pen のような関数がないって事がわかってて、
penの型定義も限定されてるから、そこに書くことのできる値は限られてる。

89 :デフォルトの名無しさん:2017/10/17(火) 22:58:59.79 ID:IqfDhIHj.net
>>85
その絞り込みの是非は置いておくとして、「参照透明」と「絞り込み」の関係がよく分からん。
その例だと、参照透明である必要はないと思うが。

90 :デフォルトの名無しさん:2017/10/17(火) 23:07:03.82 ID:kmqw2VEi.net
>>89
そうだね。絞り込みについては静的であれば充分。
参照透明なら実行中に値が変わることがないから、例えばShowしたものを補完候補としてリストアップできる。

91 :デフォルトの名無しさん:2017/10/17(火) 23:16:36.80 ID:bTvRRU/M.net
id やら const やらの問題はさておき
そこでもし仮に apple に絞られたら相当イラつく

92 :デフォルトの名無しさん:2017/10/17(火) 23:25:06.39 ID:IqfDhIHj.net
>>88
その例なら簡単にできるけど、一般的には相当厳しいと思うよ。

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

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


あと、参照透明は破られないという前提で話してると思うけど、
unsafePerformIO 関数があることを忘れないように。

93 :デフォルトの名無しさん:2017/10/18(水) 11:52:10.17 ID:LmQIn2MI.net
まずは自動車を二人で運転したり、独裁者が二人いる国を作ってみればいいのだ
それができたら一人を機械で置き換えて人間+機械のコンビを作る

94 :デフォルトの名無しさん:2017/10/18(水) 22:09:24.34 ID:XAtaZZJd.net
Haskellでウェブアプリ作れますか?

95 :デフォルトの名無しさん:2017/10/18(水) 22:40:49.32 ID:CCDizLJ7.net
>>94
作れるよ。
フレームワークもいくつかあるし、入門書もある。

96 :デフォルトの名無しさん:2017/10/18(水) 23:03:06.30 ID:449CvZ10.net
webフレームワーク周りは一時期乱立とは言わないまでもだいぶ混乱してた印象があるけど
最近の流れはどうなってるんだろうか

97 :デフォルトの名無しさん:2017/10/18(水) 23:44:26.71 ID:gezDC8oz.net
すみません、ある型とその取扱い関数の
標準・追加ライブラリでの有無の確認なのですが、

実数の範囲を表す型で(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.99 ID:gezDC8oz.net
すみません。
「リスト2番目」の間違いでした。

99 :デフォルトの名無しさん:2017/10/18(水) 23:54:52.59 ID:JBC50Xi/.net
Yesodの辛さを述べた記事を最近みた。

100 :デフォルトの名無しさん:2017/10/19(木) 00:31:32.35 ID:IrC75yTx.net
最近なら servant が多いんじゃないか?

101 :デフォルトの名無しさん:2017/10/19(木) 00:42:33.76 ID:IrC75yTx.net
>>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.69 ID:a0gJXcH3.net
>>97
存在しない、と思う。
https://ideone.com/378zY1

103 :デフォルトの名無しさん:2017/10/19(木) 02:16:33.94 ID:CTOkinld.net
まだイェソドが最強なのですか?

104 :デフォルトの名無しさん:2017/10/19(木) 07:52:00.67 ID:NmeCWEht.net
イェソドってセフィロトの樹と何か関係あるの?

105 :デフォルトの名無しさん:2017/10/19(木) 11:32:05.27 ID:yTKuENfR.net
辞書ファイルから欲しいデータを抜くのに使ってるけど、
Haskellだとライブラリ使うというより、
スクラッチで欲しい関数を書けるのが良いね。
調べるより作った方が早いし細かい調整がきく。

106 :デフォルトの名無しさん:2017/10/19(木) 15:41:04.63 ID:a0gJXcH3.net
>>92
参照透明性を破壊するようなunsafeの使い方はするべきじゃない。
利用者に、穴の空いたトランポリンで跳ね回れと言ってるようなもんだぞ。

107 :デフォルトの名無しさん:2017/10/19(木) 18:16:54.99 ID:XElZhSKt.net
>Haskellだとライブラリ使うというより、
>スクラッチで欲しい関数を書けるのが良いね。
> 調べるより作った方が早いし細かい調整がきく

小さいパーツ程度ならね

108 :デフォルトの名無しさん:2017/10/19(木) 18:41:26.50 ID:TgxB2ED8.net
>穴の空いたトランポリンで跳ね回れ
いいなこれ。今度から使わせてもらうわ

109 :デフォルトの名無しさん:2017/10/19(木) 20:44:43.20 ID:C59kUjZF.net
>>106
それは分かってる。
その意見には俺も全面的に賛成だよ。

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

だから、参照透明が保たれているという前提で補完機能を作るわけにはいかない。

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

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

アドバイスは的を得ていると思う。指摘を受けて、SafeHaskellでのみリッチな補完が出来る。という回避を考えているよ。

111 :デフォルトの名無しさん:2017/10/19(木) 21:31:47.78 ID:a0gJXcH3.net
>>109 CmdArgs パッケージは、初見だけど… うーん。なぜこんな風になってるんだろう。
IOにするわけにはいかんのだろうか?

112 :デフォルトの名無しさん:2017/10/19(木) 21:38:26.29 ID:IrC75yTx.net
Haskell使ったプロダクションコードにしばしばあるやつね
環境変数みたいなのは Reader で引き回すよりさっくり
unsafePerformIO でアレするのがアレでね

113 :デフォルトの名無しさん:2017/10/19(木) 21:41:05.61 ID:a0gJXcH3.net
だいたい判った。この用途では仕方ない。

114 :デフォルトの名無しさん:2017/10/19(木) 21:42:06.30 ID:IrC75yTx.net
>>107
>小さいパーツ程度ならね

その小さなパーツを見通しよく組み合わせられるあたりが功徳なんでねえ

115 :デフォルトの名無しさん:2017/10/19(木) 21:51:43.24 ID:TgxB2ED8.net
unsafePerformIO取締法違反でタイポする!

116 :デフォルトの名無しさん:2017/10/19(木) 22:14:05.51 ID:n4u77snN.net
コンパイラがしゃべった!?って、ただの腹話術か
いっつも腹話術してるな

117 :デフォルトの名無しさん:2017/10/19(木) 23:17:00.35 ID:55bDTs5O.net
あれ?評価が、遅れて、されるよ?

118 :97:2017/10/19(木) 23:19:50.69 ID:q5MeOdeo.net
>>101
>>102
ありがとうございます。
書いて下さったコードを参考にし、利用させて頂きます。

119 :デフォルトの名無しさん:2017/10/20(金) 09:50:03.15 ID:Bz70yab6.net
>>112
そんな事すると、何のために Haskell を使ってるのか分からん

120 :デフォルトの名無しさん:2017/10/20(金) 11:11:48.75 ID:zpEeQZDE.net
じゃあ「分かるHaskell」と「分からんHaskell」の両方を使いこなせばいいよ
そういう多様性を何のために肯定するのかっていうと
未知の新しい言語を見た瞬間に使いこなすための練習だと思えばいいんじゃないか

121 :デフォルトの名無しさん:2017/10/20(金) 13:24:48.13 ID:f6ubOuco.net
>>120
そういうのは趣味や個人の時間にやって備えておくもので、
プロダクション(本番)でやるものではないと思う。

122 :デフォルトの名無しさん:2017/10/20(金) 13:41:07.05 ID:Lk8bVHte.net
まあ、プロダクションだとやっぱり時折 unsafe 唱えるわけだけど
どういうときに唱えても已むを得ないかの知識が秘伝のタレ化してる感はある

123 :デフォルトの名無しさん:2017/10/20(金) 17:24:25.31 ID:zpEeQZDE.net
x = unsafePerformIO m
main = do {
safe_x <- return $! x;
...
}
これで無難な値を無難なタイミングで取り出せる
ただし、mainを2回実行したらmは何回実行されるべきかの知識が秘伝

124 :デフォルトの名無しさん:2017/10/20(金) 17:32:08.06 ID:GdkUB6y1.net
unsafe* を使用する際は逐一稟議を通すこと

125 :デフォルトの名無しさん:2017/10/20(金) 17:57:47.07 ID:gxUn2vL9.net
unsafeReadとunsafeWriteの詳しい説明や使い方がわかる書籍やサイトがあれば教えてください

126 :デフォルトの名無しさん:2017/10/20(金) 18:14:08.30 ID:Vljj85av.net
グローバル定数とみなせる値を取得したい + 使う場所がMonadIOでない + 設計変更の時間はない

127 :デフォルトの名無しさん:2017/10/20(金) 18:38:52.46 ID:zpEeQZDE.net
使用したいというより読みたいんだよ
ありのままの現実を読む主義
現実を操作するつもりはない

128 :デフォルトの名無しさん:2017/10/20(金) 22:15:19.17 ID:YXH4kbKq.net
Haskellやったら特別になれるの?

129 :デフォルトの名無しさん:2017/10/20(金) 22:37:34.15 ID:rG34NDiA.net
疎外感を味わえます

130 :デフォルトの名無しさん:2017/10/20(金) 23:04:24.26 ID:Vljj85av.net
そうならなくて済むよう、普及にもう少し力を入れる必要があるよね。

何があれば賑わうかって考えたんだけど、やっぱりもっと和書が必要ではないか。
「Haskellでゲームを作る本」とか「Haskellで解る圏論入門」とかどうだろう。

131 :デフォルトの名無しさん:2017/10/20(金) 23:22:26.18 ID:ut8tKZ1b.net
Haskellなら三ヶ月後、自分で書いたコードを読めます

132 :デフォルトの名無しさん:2017/10/21(土) 00:05:14.21 ID:yOthW/dM.net
>>131
そんな楽観はできない。

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

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

意識していないと陥りやすい罠は幾らでもある。

133 :デフォルトの名無しさん:2017/10/21(土) 00:23:56.54 ID:4Fwr4eN0.net
https://ideone.com/880zvK

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

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

いまstackのコードを読んでるんだけど、意図してコードのレベルを抑えてるフシがある。const を使わずに \_->... と書いてたり。
練度の高低でコードが違ってくることはある意味で良いことといえるのかもしれないけど、多人数で使う際には難しさがあるようだ。

135 :デフォルトの名無しさん:2017/10/21(土) 01:24:40.12 ID:E5Mq7+kB.net
https://ideone.com/q2RCBe

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

solve = build “” “”

という行を見て
「ああアキュムレータが2つあるのね」
とわかるのであとはそのまま読むだけ

136 :デフォルトの名無しさん:2017/10/21(土) 01:35:46.03 ID:E5Mq7+kB.net
というか、>>133 のコードはこれはネタでわざとやってるな

137 :デフォルトの名無しさん:2017/10/21(土) 04:25:54.74 ID:Sgt31MqE.net
うひょーッ iOS & Android の ghc バイナリが来た!
http://hackage.mobilehaskell.org/
解説ページ
https://medium.com/@zw3rk/ghc-cross-compiler-binary-distributions-490bb2c0c411

138 :デフォルトの名無しさん:2017/10/21(土) 06:39:56.81 ID:M5O/aj/a.net
何が始まるんです?

139 :デフォルトの名無しさん:2017/10/21(土) 12:52:45.37 ID:JKqQJ+2p.net
自分で書いたコードが、他人が書いたコードと同じに見える

これは普通
同じ書き方をしない方が異常
3ヵ月前の時点ですでに他人が書いたコードと同じに見えていい

140 :デフォルトの名無しさん:2017/10/21(土) 17:28:30.51 ID:lv/AbapF.net
>>135
Data.Mapでもっと単純に書けそうな気がしたけど気のせいだった
https://ideone.com/R4dQIW

141 :デフォルトの名無しさん:2017/10/21(土) 21:05:29.77 ID:sahtjmhq.net
>>124
稟議のロジックをHaskellで書いてくれ。

142 :名無しさん@そうだ選挙に行こう! Go to vote!:2017/10/22(日) 09:33:44.39 ID:IsEvYiKq.net
アキュムレータのように引数で変数束縛するのはprologっぽい書き方

haskellならアキュムレータの代わりにwhereを使う手がある
makeMaximumSizeAndMinimumOrderPalindrome wordlist = xs ++ [y] ++ zs where ...

143 :名無しさん@そうだ選挙に行こう! Go to vote!:2017/10/22(日) 14:42:07.09 ID:b60KFBOe.net
Intellij IDEAのIntellij-Haskellプラグインが上手く実行できなくて諦めかけてたけど改めて挑戦したらやっとできた
これで俺もIDEデビューだ
開発効率上がるといいな

144 :名無しさん@そうだ選挙に行こう! Go to vote!:2017/10/22(日) 15:26:27.37 ID:mN+j7loz.net
アキュムレータの意味がわかってないキチガイがいるのか……

145 :デフォルトの名無しさん:2017/10/26(木) 22:30:22.73 ID:/i1iouMm.net
ByteStringについて、↓の記事に
「使い方の結論を述べると、入力には正格 ByteString、出力は遅延 ByteString を用います」
と書いてあるのですがそうなんですか?
だとしたらなぜそうなるのか教えていただけますでしょうか

http://d.hatena.ne.jp/kazu-yamamoto/touch/20110525/1306298046

146 :デフォルトの名無しさん:2017/10/27(金) 19:45:49.01 ID:is9IZ5oJ.net
CodinGameをHaskellで攻略した方の感想ください

https://www.codingame.com/

147 :デフォルトの名無しさん:2017/10/28(土) 17:22:18.77 ID:sV/HPdac.net
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.06 ID:sV/HPdac.net
> 入力には正格 ByteString、出力は遅延 ByteString
これ俺も疑問に思ってた

149 :デフォルトの名無しさん:2017/10/28(土) 17:37:14.16 ID:vt4jCtcJ.net
実装上の都合です
理論的には何の根拠もございません

150 :デフォルトの名無しさん:2017/10/28(土) 17:45:11.92 ID:zE41SC6F.net
メモリ的には入力遅延のほうがよさそうだけどハンドルをすぐ解放するために正格ということかな

151 :デフォルトの名無しさん:2017/10/28(土) 19:05:35.06 ID:nHlzoa71.net
512MB of zeroes with different implementations of echo

https://i.imgur.com/i5SkntG.jpg

152 :デフォルトの名無しさん:2017/10/28(土) 20:19:14.51 ID:zE41SC6F.net
どの本だっけ、Real World?

153 :デフォルトの名無しさん:2017/10/28(土) 20:46:38.08 ID:DenCC8QE.net
出典はHaskell High Performance Programmingです

154 :デフォルトの名無しさん:2017/10/28(土) 21:00:26.16 ID:zE41SC6F.net
それか
読みたいと思ってたんだよなそれ
邦訳はよ

155 :デフォルトの名無しさん:2017/10/29(日) 00:46:23.62 ID:UfAXS2oV.net
>>151
正格ByteStringが遅延に買ってる部分ないのか

156 :デフォルトの名無しさん:2017/10/29(日) 07:47:46.53 ID:U58o7DSK.net
普通に配列とリストの違い
ただしリストの要素は32kの配列

157 :デフォルトの名無しさん:2017/10/29(日) 09:00:08.15 ID:vzk3gwxY.net
WAI の実装とかそういう凄え特殊な場面での話だろうな
リソース管理が死活の場面では Lazy IO がワリと死ねるので

でもそういうのはいまなら各種の streaming ライブラリでOK

158 :デフォルトの名無しさん:2017/10/29(日) 22:14:12.00 ID:HYvWAe4Y.net
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.88 ID:SX8DMS20.net
これ?

Haskell の畳み込み関数 - foldl, foldr | すぐに忘れる脳みそのためのメモ
http://jutememo.blogspot.jp/2008/06/haskell-foldl-foldr.html

160 :デフォルトの名無しさん:2017/10/30(月) 00:11:55.76 ID:kEApsxXD.net
競プロでhaskell使う場合の何かアドバイスください

この問題解けませんでした
https://yukicoder.me/problems/no/583
https://yukicoder.me/submissions/212458

161 :デフォルトの名無しさん:2017/10/30(月) 00:12:43.74 ID:XzbjUl3p.net
今はコンパイラに解決させるようにしているようだね
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.68 ID:VIeJ5TeT.net
中身としてはこれかな
foldlを直す - 純粋関数空間 http://tanakh.jp/posts/2014-04-07-foldl-is-broken.html

>>158のように素直に定義したらどっちでも変わらないのはその通りで、
foldlの方は末尾再帰の形になってるからseqすることでいい感じに動いてくれる

163 :デフォルトの名無しさん:2017/10/30(月) 08:02:56.80 ID:WTE/ZW3E.net
>>162
> >>158のように素直に定義したらどっちでも変わらないのはその通りで、

やっぱり。
これを聞いて安心した。
みんな、ありがと。

164 :デフォルトの名無しさん:2017/10/30(月) 08:39:48.03 ID:rELgjW3C.net
foldlを使うことってほぼない気がする
だいたいfoldl'を使ってる

165 :デフォルトの名無しさん:2017/10/30(月) 08:42:25.25 ID:WTE/ZW3E.net
>>160
その問題は、要するにグラフが準オイラー路になっているかどうかを判定するものだよ。

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

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

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

Haskell で素直に拙くプログラムしても特に問題ないだろうね。
たとえば、N個の要素を持つInt型配列にaccumArrayで次数を集計して、
filterで奇数だけ濾し取り、要素数を調べる。

166 :デフォルトの名無しさん:2017/10/30(月) 08:46:34.46 ID:I1PPVtSx.net
>>164
最適化で正格になるはずだけど明示的に正格版使う必要ある?

167 :デフォルトの名無しさん:2017/10/30(月) 08:49:38.37 ID:WTE/ZW3E.net
>>160
すまん、準オイラー路を判定する前に、
連結グラフかどうかを調べる必要があった。

168 :デフォルトの名無しさん:2017/10/30(月) 09:33:39.10 ID:032bj4sa.net
haskellで連結判定って面倒そう

169 :デフォルトの名無しさん:2017/10/30(月) 11:24:36.92 ID:WTE/ZW3E.net
>>160
>>168
準オイラー路かどうかを判定する前にと言ったけど、
後の方がいいな。

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

これなら、そう面倒でもないような気がする。

170 :デフォルトの名無しさん:2017/10/30(月) 11:28:25.84 ID:WTE/ZW3E.net
>>169
ごめん、ダメだな。

素直にシードフィルみたいに辿っていくしかないか。

171 :デフォルトの名無しさん:2017/10/30(月) 11:57:14.99 ID:I1PPVtSx.net
最適化O2からなの忘れてたすまん

172 :デフォルトの名無しさん:2017/10/30(月) 12:01:00.21 ID:WTE/ZW3E.net
>>160
Haskell が得意なアルゴリズムは分割統治なので、
できるだけ分割統治で解けないか考える、
というのが一般的なアプローチ。

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

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

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

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

これしかないね。
Haskellにはとことん向かない問題だと思う。

173 :デフォルトの名無しさん:2017/10/30(月) 12:13:21.53 ID:/4xzRH5O.net
Haskellわからんからわからんのだがこれとか簡単にかけてそうなんだがそうでもないのか?
https://yukicoder.me/submissions/213035

174 :デフォルトの名無しさん:2017/10/30(月) 12:24:13.36 ID:oL0091Lz.net
>>173
連結性の判定を忘れてた

175 :デフォルトの名無しさん:2017/10/30(月) 12:25:22.45 ID:/4xzRH5O.net
>>174
よく見たらWrong Answerだったわ...orz

176 :160:2017/10/30(月) 20:27:20.42 ID:kEApsxXD.net
>>165-175
助言ありがとうございました
Haskellは分割統治が得意、連結判定苦手で覚えます

177 :デフォルトの名無しさん:2017/10/30(月) 22:41:45.81 ID:bEDc9q0a.net
連結判定だけじゃなくてグラフがらみは総じて苦手じゃないかな

178 :デフォルトの名無しさん:2017/10/31(火) 01:03:17.65 ID:hkKKSLGp.net
コンパイラはグラフ簡約するのに言語はグラフ苦手なのかよお

179 :デフォルトの名無しさん:2017/10/31(火) 01:46:52.15 ID:HrVASABH.net
つうか制約のない連結性の判定を深さ優先探索でするのは別にHaskellのせいじゃないだろ

180 :デフォルトの名無しさん:2017/10/31(火) 03:22:06.20 ID:mBYeMGb0.net
グラフ苦手って競技プログラミングで使う場合のみやろ?普段使う分にはグラフライブラリに突っ込めばいいだけやし気にする必要無いやで!

181 :デフォルトの名無しさん:2017/10/31(火) 08:27:49.90 ID:v6NvB8KL.net
ライブラリでも、計算量は多くなるよね?

182 :デフォルトの名無しさん:2017/10/31(火) 08:33:52.06 ID:ipWwIy6g.net
わざわざ車輪の再発明させる競プロってなんなん

183 :デフォルトの名無しさん:2017/10/31(火) 08:44:38.36 ID:DbaXyY3l.net
Data.Array.(!) や Data.Vector.(!) って O(1) でアクセスできるんですか?
純粋な関数型言語でそんなこと可能なのですか?

184 :デフォルトの名無しさん:2017/10/31(火) 08:50:21.95 ID:DbaXyY3l.net
>>182
その方が面白いからだと思いますよ。
コードゴルフとかと同じですよ。
制約があった方が燃えます。

185 :デフォルトの名無しさん:2017/10/31(火) 10:02:54.23 ID:HrVASABH.net
>>183
>Data.Array.(!) や Data.Vector.(!) って O(1) でアクセスできるんですか?
>純粋な関数型言語でそんなこと可能なのですか?

読む分にはO(1)に決まってる
そもそもData.Vectorのドキュメントに様々な関数の計算量が書いてあるだろ

186 :デフォルトの名無しさん:2017/10/31(火) 10:40:05.74 ID:DbaXyY3l.net
>>185
要素数に依存しない計算量で構造から読み取るなんて、
純粋な関数だけでどうやって実現するの?
不思議すぎない?

187 :デフォルトの名無しさん:2017/10/31(火) 11:15:03.94 ID:HrVASABH.net
はあ?
インデクスからメモリ上の位置(たとえばポインタ)へのO(1)な関数があればいいだけだろ
通常の配列もハッシュも変わらん

188 :デフォルトの名無しさん:2017/10/31(火) 11:25:52.68 ID:u1zcRbeB.net
ライブラリとして提供されてるからそうであって、
Haskellの構文としては書けないって話では?

189 :デフォルトの名無しさん:2017/10/31(火) 11:28:55.70 ID:0GSWnPMN.net
>>187
キッシヨ

190 :デフォルトの名無しさん:2017/10/31(火) 11:31:18.73 ID:0GSWnPMN.net
ミスった
キスしよ、な

191 :デフォルトの名無しさん:2017/10/31(火) 11:33:38.62 ID:DbaXyY3l.net
>>187
そのO(1)な関数は純粋関数型でどうやって実現してるの?
俺はすげー不思議、という話だよ。

192 :デフォルトの名無しさん:2017/10/31(火) 11:36:03.56 ID:K+wdnCfv.net
純粋データ型のオブジェクトはすべて構築物
(つまり既存のオブジェクトから構築されたもの)
という視点を持たないとこの手の話は一生理解できんと思う

193 :デフォルトの名無しさん:2017/10/31(火) 11:46:17.59 ID:DbaXyY3l.net
>>192
このあたり、「純粋関数型データ構造」って本で勉強できる?
それともあの本は関係ない?

194 :デフォルトの名無しさん:2017/10/31(火) 13:07:49.38 ID:xZzZlui7.net
1 = \x _ _ ... -> x
2 = \_ x _ ... -> x
3 = \_ _ x ... -> x
~
という自然数を定義すれば
\i -> i a b c ...
で参照O(1)な配列の出来上がり

195 :デフォルトの名無しさん:2017/10/31(火) 13:20:29.54 ID:DbaXyY3l.net
>>194
それじゃあ、Data.Vector みたいに動的に生成できないでしょ。

ワザととぼけてるの?
それとも話の流れ分かってない?

196 :デフォルトの名無しさん:2017/10/31(火) 13:30:02.62 ID:xZzZlui7.net
>>195
\x y z ... -> \i -> i x y z ...

197 :デフォルトの名無しさん:2017/10/31(火) 13:43:09.29 ID:xihCdoaS.net
C言語で実装してラップしてんじゃないの(知らんけど)

198 :デフォルトの名無しさん:2017/10/31(火) 13:47:50.97 ID:DbaXyY3l.net
>>196
すげーおまえ頭いいなって思ったが、すまん、
こっちの頭が悪すぎた、まだ何となくしか理解できん。

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

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

fromList :: [a] -> 配列型 a
fromList xs = ムニャムニャ

199 :デフォルトの名無しさん:2017/10/31(火) 15:36:16.62 ID:xihCdoaS.net
C言語で実装してラップしてんじゃないの(知らんけど)

200 :デフォルトの名無しさん:2017/10/31(火) 15:50:28.40 ID:xZzZlui7.net
>>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.45 ID:DbaXyY3l.net
>>200
ありがと

あかん、頭の中で考えてても理解できん、
と言うかスッキリしない。
家に帰ったらじっくり勉強してみるよ。

202 :デフォルトの名無しさん:2017/10/31(火) 18:15:23.97 ID:gU/sNGWK.net
競プロで使えるグラフライブラリに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.44 ID:1toVIYFj.net
>>202
上の問題でverticesとreachableの長さを比較すればと思ったら
verticesは辺の無い頂点も列挙する仕様だったわ
まあGraphの中身はリストの配列だから自分で数えればいいんだけど

204 :デフォルトの名無しさん:2017/10/31(火) 21:49:16.80 ID:uNFhbghr.net
関数合成ってhoge.piyoよかhoge . piyoの方が可読性高い?

205 :デフォルトの名無しさん:2017/11/01(水) 00:06:04.05 ID:viv8LMSD.net
>>204
スペース無しドットはモジュールの名前空間の表現に使うから
関数合成は後者で書く方がいいよ
モジュール名は大文字で関数名は小文字だからコンパイラは間違えないけど

206 :デフォルトの名無しさん:2017/11/01(水) 00:26:27.90 ID:llNAjsKg.net
hackageのソースコード見ても合成のドットは離して書いてるの多いね

207 :デフォルトの名無しさん:2017/11/01(水) 00:27:10.19 ID:WlWR964+.net
>>205
やっぱりそうですか
ありがとうございます

208 :デフォルトの名無しさん:2017/11/01(水) 01:06:06.52 ID:Fgn1cTLB.net
人間も間違えねえよってつっかかってくる人昔みかけた
そういう人が出たら、宗教戦争やめろっていうつもりだったのに

209 :デフォルトの名無しさん:2017/11/01(水) 07:53:11.67 ID:DzcCU70V.net
「大文字と小文字を間違えない」の主語は何かの戦争か
そもそも主語を書く必要があるのか

210 :デフォルトの名無しさん:2017/11/01(水) 09:43:47.82 ID:55me074h.net
データコンストラクタも大文字なので(ry

211 :デフォルトの名無しさん:2017/11/01(水) 11:37:03.55 ID:DzcCU70V.net
最初の文字が大文字やドットなら特別な意味がありそう
最初ってどこなのかは正規表現で定義すれば間違いなさそう

212 :デフォルトの名無しさん:2017/11/04(土) 23:17:33.32 ID:GxslH7p8.net
リスト内包表記がdo表記に一対一に対応するのは知っていますが、
言語拡張 TransformListComp によって拡張されたリスト内包表記も、
一対一に対応するdo表記があるのでしょうか。

then group by e using f の働きがどのような仕組みなのかよく分からないので、
対応するdo表記を調べて理解を深めたいです。

213 :デフォルトの名無しさん:2017/11/05(日) 08:59:13.86 ID:BXN9Zljm.net
>>212
>対応するdo表記を調べて理解を深めたいです。

どうぞそうなさって結果をスレにてご報告ください。

214 :デフォルトの名無しさん:2017/11/05(日) 11:02:14.73 ID:33a+kqna.net
>>213
いろいろ実験したり、GHCのユーザーガイドを読んだりしたところ、
then group by p using f の働きが理解できました。

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

代わりに、then group by p using f がどのような働きになっているのか、
私の知見だけでも述べた方が良いでしょうか。

215 :デフォルトの名無しさん:2017/11/05(日) 13:47:42.35 ID:iHS/FHvi.net
知見は歓迎です

216 :デフォルトの名無しさん:2017/11/05(日) 14:29:15.46 ID:g7Wivisu.net
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.19 ID:Rt4/SB7E.net
Haskellの表記を楽にする6つのghc拡張 - Qiita
https://qiita.com/philopon/items/b812e43128654245e42d

218 :デフォルトの名無しさん:2017/11/05(日) 23:15:17.53 ID:s0bBqtdw.net
>>217
MultiWayIfとBinaryLiterals以外は可読性落ちとるやないかーい

219 :デフォルトの名無しさん:2017/11/05(日) 23:28:42.70 ID:33a+kqna.net
>>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.83 ID:GpiHsSLN.net
haskell始めてみたいんだけどまだプログラミング能力があまりないので不安
他の言語をどれくらい書けるようにしておくべき?

221 :デフォルトの名無しさん:2017/11/13(月) 23:15:58.10 ID:IehbHsjb.net
むしろ手続き型言語に慣れ親しんだ脳みそだと関数型は取っ付きにくいから
いきなりHaskellでいいと思うよ

222 :デフォルトの名無しさん:2017/11/13(月) 23:27:39.67 ID:ZUv/XWe7.net
>>221
Masterminds of Programming という本で Haskell 委員会のひとりが、
他言語をちゃんとできるヤツはHaskellも上手く使える、という趣旨のことを言ってた。

223 :デフォルトの名無しさん:2017/11/13(月) 23:30:10.81 ID:ZUv/XWe7.net
>>221
それどころか、いきなりHaskellをやるのはお勧めしない感じだった。

224 :デフォルトの名無しさん:2017/11/13(月) 23:30:57.19 ID:PxhTPMZi.net
>>222
「ちゃんと出来る」の意味が、常人と違う予感。

225 :デフォルトの名無しさん:2017/11/13(月) 23:42:04.93 ID:dMdke9KA.net
いきなりHaskellの難点はどのHaskell入門書籍やサイトも基本的なプログラミング知識を前提としちゃってるとこかな
変数とか関数とかリストとかマップとか
でもHaskellというか関数型パラダイムにできるだけ早い時期から触れとくのは良いことだと思う

226 :デフォルトの名無しさん:2017/11/14(火) 00:36:12.17 ID:XSI09cgL.net
>>220

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

でOCamlやってからHaskellに逝くのが一番簡単な導入

227 :デフォルトの名無しさん:2017/11/14(火) 00:42:09.25 ID:Meoq/IF/.net
SICP読んでからhaskellやるのは大丈夫?

228 :デフォルトの名無しさん:2017/11/14(火) 02:30:14.88 ID:RezF4qhu.net
Haskellは日本語どころか
英語でググっても答えが見つからない問題にぶち当たる率が
他のメジャーな言語と比べると高すぎるから初学者向きじゃないよ

もくもく会に参加したり、Stack Overflowで質問したりと
双方向的な方法を挟まないと一定以上に到達するのは難しい

229 :デフォルトの名無しさん:2017/11/14(火) 11:28:30.93 ID:eZNGHHYs.net
問題自体が難しい
だから答えが見つからない
と解釈するのが自然

問題自体をよく見ようとせず、SEOや脳味噌のことを考えるのは的外れだと思う

230 :デフォルトの名無しさん:2017/11/14(火) 19:55:37.30 ID:0CBPSjnu.net
ocamlの元のmlで挫折しそうになった。
f#がたのしい

231 :デフォルトの名無しさん:2017/11/14(火) 20:17:46.83 ID:WUG8DCiI.net
例えばC言語の楽しさを1とすると
haskell,ocaml,f#の楽しさはどれぐらい?

232 :デフォルトの名無しさん:2017/11/14(火) 21:11:59.47 ID:eZNGHHYs.net
F#はC#の知識を前提とすることを許可されている感がある
箸の上げ下ろしどころか知識を得るのにも許可を必要とする異常な環境に適応したのがF#

233 :デフォルトの名無しさん:2017/11/14(火) 22:22:03.84 ID:0CBPSjnu.net
f#はなんかこう昔懐かしbasicの関数型言語版のよう
な気がする。

234 :デフォルトの名無しさん:2017/11/14(火) 22:22:45.27 ID:0CBPSjnu.net
haskell構文がやだ。

235 :デフォルトの名無しさん:2017/11/14(火) 22:58:23.51 ID:LvvrWEBo.net
>>234
たとえば、どんな構文が?

遅延評価とか参照透過性とか厳密な型付けとか、そういうのを嫌う人はいっぱいいたけど、
構文が嫌って人には初めて出会った。

236 :デフォルトの名無しさん:2017/11/14(火) 22:59:13.88 ID:wshk46M/.net
F#固有のライブラリ使ったことないな
構文的にC#よりF#楽
あとはHaskell並みの肩推論あれば文句ないんだけど
Haskellは遅延評価使いどころを見つけづらい

237 :デフォルトの名無しさん:2017/11/14(火) 23:31:10.95 ID:lH5WJrT0.net
結構凝ってるみたいっすねえ

238 :デフォルトの名無しさん:2017/11/15(水) 01:49:26.34 ID:9iJNvTMA.net
むしろ構文が好きだわ
限りなく不要な物は省く的な

239 :デフォルトの名無しさん:2017/11/15(水) 07:22:37.14 ID:1MOdQV57.net
インデントルールにたまにハマるくらいかな
一応ブレース&セミコロン方式でも書けるようだが

240 :デフォルトの名無しさん:2017/11/15(水) 12:36:08.57 ID:Lu+q1695.net
合成関数を左から右に書きたい
何か数学でそんな書き方もあったと思うんだけど忘れた

241 :デフォルトの名無しさん:2017/11/15(水) 17:52:48.58 ID:C1PNunQ6.net
Control.Arrow の (>>>) 演算子使えばいい
($) の引数入れ替えたヴァージョンなら Data.Function の (&) 演算子

242 :デフォルトの名無しさん:2017/11/15(水) 17:55:11.80 ID:C1PNunQ6.net
>>239
>一応ブレース&セミコロン方式でも書けるようだが

標準的なコーディングスタイルだと使わないからなあ……
コード生成のときなんかには便利だけど

243 :デフォルトの名無しさん:2017/11/15(水) 21:31:38.92 ID:ouxrorYh.net
Preludeに引数を入れ替えるというだけの関数なかったっけ?
マニアック過ぎて忘れてしまった

244 :デフォルトの名無しさん:2017/11/15(水) 22:05:39.40 ID:C1PNunQ6.net
つ flip

全然マニアックじゃないよ……

245 :デフォルトの名無しさん:2017/11/16(木) 19:05:18.93 ID:U25znXQF.net
Haskellが競プロで得意なグラフ問題がatcoderでマラソン形式で出題されているらしい

246 :デフォルトの名無しさん:2017/11/16(木) 20:02:11.38 ID:fiTPZdVA.net
誰もhaskell使ってないでしょ

247 :デフォルトの名無しさん:2017/11/16(木) 20:10:09.25 ID:sSGm4ReW.net
使うものじゃないからな。

248 :デフォルトの名無しさん:2017/11/16(木) 20:21:11.26 ID:F5ZZYHwp.net
競プロでHaskell使ってた人は皆Rustに移ったイメージ

249 :デフォルトの名無しさん:2017/11/16(木) 20:28:57.17 ID:BHFP68Bt.net
競プロは普通に手続き型かつ破壊的の方がいいもんな
入力範囲も固定だし、Haskellで挑む理由がない

250 :デフォルトの名無しさん:2017/11/16(木) 21:32:29.59 ID:F5ZZYHwp.net
関数型っぽく書くと実装が一瞬で完了する簡単な問題が結構あったりはする

251 :デフォルトの名無しさん:2017/11/16(木) 21:43:12.74 ID:wcx5gPy1.net
競プロより Project Euler で付けた力の方が将来の糧になりそう

252 :デフォルトの名無しさん:2017/11/16(木) 22:35:40.89 ID:1hTLcaK1.net
Haskellはアルゴリズムをうまくfold系で書ければ
融合則とかで綺麗さと速度を両立できる感じになるけど
うまく書けないとSTRefとか使うことになって
なぜHaskellやってるんだって気分になる

253 :デフォルトの名無しさん:2017/11/17(金) 00:37:00.18 ID:ehxZncBr.net
ストリーム処理的にしか使ってない

254 :デフォルトの名無しさん:2017/11/17(金) 00:38:56.41 ID:ehxZncBr.net
ストリーム処理的にしか使ってない
https://ideone.com/kYgQxV

255 :デフォルトの名無しさん:2017/11/17(金) 11:21:31.36 ID:7fJDQyWy.net
>>252
fold系には合わない計算があるのは分かる。

でも、なぜそれでSTRefを使うことになるのかが分からない。

256 :デフォルトの名無しさん:2017/11/17(金) 12:39:19.61 ID:edPG1sGH.net
別にIORefやSTRefを使ったっていいじゃない
FFIだってポインターだってあるじゃない
ただしStateモナド、テメーはダメだ

257 :デフォルトの名無しさん:2017/11/17(金) 16:36:27.24 ID:FedOcmK4.net
よく知らないけど
カーソル的なクラスと同じように使えるんじゃない?Stateって
Stateモナドに入るのがインスタンス生成で>>=がメソッドコール

258 :デフォルトの名無しさん:2017/11/17(金) 17:56:56.51 ID:oGefn9Ej.net
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.19 ID:M/sHB851.net
Haskellって他人のコード読むと

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

こんなんばかりで脳がパンクするんだが

260 :デフォルトの名無しさん:2017/11/17(金) 20:52:24.67 ID:FaJpeIXU.net
むしろ他人のコードでも割とサクサク読めるのがHaskellのメリットじゃね?

261 :デフォルトの名無しさん:2017/11/17(金) 22:00:31.45 ID:Tih5fc0e.net
>>259
せっかく参照透過性が保たれているのだから、自分が読みやすいように、
でも式の意味は変えないように変形すればいい。

複雑なコードに出会って、それでも理解したいという欲求があるのなら、
取りあえず脳がパンクしない程度の小片にまで分解してみればいいんじゃないか。

262 :デフォルトの名無しさん:2017/11/17(金) 23:01:40.13 ID:5gG4LJO3.net
なるほど処理を理解しきっていなくても
他人のコードを自分が読みやすく変形出来るのが参照透過性のメリットなのね。
その発想はなかったから今度から試してみる。

263 :デフォルトの名無しさん:2017/11/18(土) 00:48:05.98 ID:Na4dLuAE.net
>>255
foldに乗らない処理ってのが
要は愚直に再帰で書いてるループ計算で、
破壊的更新をしないとものすごいGCが走ってつらいということがあった
(データ構造にもっと工夫の余地があったとは思う)

264 :デフォルトの名無しさん:2017/11/18(土) 02:53:34.88 ID:/UaXWK/X.net
実際再帰って最終手段だよね。
入門者向けには基本みたいに言われている謎。

265 :デフォルトの名無しさん:2017/11/18(土) 08:54:42.51 ID:6/fTmZe2.net
言うほど最終手段ではないし基本なのは事実

266 :デフォルトの名無しさん:2017/11/18(土) 12:58:42.16 ID:TxAwv536.net
Haskellってループないんじゃなかったけ
再帰なしでどうやって組むんじゃ

267 :デフォルトの名無しさん:2017/11/18(土) 13:13:54.77 ID:qwbMNygr.net
>>266
リストで言うならmapとかfoldlあたりで対応できるならそれを使えばいい
ユーザー定義の再帰関数は自由度は高いけど終了条件を見落とす可能性もあるし、場合によっては末尾再帰やら正格評価やらも気にせんといかん
必要としている仕事より強く自由度が高い関数や型をあまり使わない方がいいのは他言語と同じ

268 :デフォルトの名無しさん:2017/11/18(土) 13:17:08.17 ID:6/fTmZe2.net
直近で書いた120行程度で関数定義25個を含んだコードを見返したが、確かに再帰は一箇所もなかった。

269 :デフォルトの名無しさん:2017/11/18(土) 13:21:49.25 ID:IKdiOjx3.net
要するに集合演算があるから繰り返す必要がないということか

270 :デフォルトの名無しさん:2017/11/18(土) 13:59:18.87 ID:5lmMR8NZ.net
再帰はいいんだけど関数定義をトップレベルに並べるとまるでgotoのように見える
しかしletは使うな、caseは使うなという人もいるから
消去法で高階関数かな

271 :デフォルトの名無しさん:2017/11/18(土) 17:01:09.59 ID:Sb0VMRtj.net
再帰と言えば、今 haskell.org のサイトのトップにある prime の定義って素敵だよね。
こういう宣言的で自己説明的なプログラムが普段のコードでも書けるように精進したい。

272 :デフォルトの名無しさん:2017/11/18(土) 19:18:50.08 ID:+f9/gyau.net
以下で、なぜエラーが出るのかがわからないです。

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.81 ID:Sb0VMRtj.net
>>272
前者で then a else show a としているから、a は String 型でしかありえない。
一方、型シグネチャにより、a は String 型以外の型も認めている。
矛盾している。

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


次回から、エラーの内容も書こう。

274 :デフォルトの名無しさん:2017/11/19(日) 00:17:21.62 ID:K9yRHYlu.net
そこにエラーを出してくれるのがHaskellの良い所
動かす前に叱ってくれるって素晴らしい

275 :デフォルトの名無しさん:2017/11/19(日) 07:14:38.53 ID:gzKE6jPG.net
>>273
ありがとうございます

276 :デフォルトの名無しさん:2017/11/19(日) 14:34:38.43 ID:Sx00JERW.net
>>271
数学的な定義をそのまま書いて動くっていうのは確かにかっこいいところ
その代わりあの定義では正しい篩になってなくて割と遅かったはず

277 :デフォルトの名無しさん:2017/11/19(日) 17:33:53.76 ID:FtsW9SXJ.net
ちゃんと書くとこんな感じになる

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.15 ID:21tWIVgE.net
>>277
かっこいいコードだけど
省ける計算が多い分まだ試し割の方が速いんだな
primes = 2 : filter isPrime [3..]
isPrime x = all ((/=0) . (x`mod`)) $ takeWhile ((<=x) . (^2)) primes
数が大きくなればmodのコストが問題になるのかもしれないけど

279 :デフォルトの名無しさん:2017/11/19(日) 20:53:42.98 ID:CsMCJwUW.net
>>278
かっこいいの? どの辺りが魅力的なん?

280 :デフォルトの名無しさん:2017/11/19(日) 20:54:52.08 ID:FtsW9SXJ.net
一応言っとくと >>277 はRichard Bird がよくあるヴァージョンを批判されてきちんと篩を書いたコード

281 :デフォルトの名無しさん:2017/11/19(日) 21:08:29.23 ID:21tWIVgE.net
>>279
modを使わない所がお洒落

282 :デフォルトの名無しさん:2017/11/19(日) 21:13:45.49 ID:aWoSpo3i.net
でも解りにくいじゃん!
Haskell知らなくても何をしてるか
勝手に分かってしまうコードが宣伝用には理想

そういう視点でも
メモ化フィボナッチコードは神コードだね

283 :デフォルトの名無しさん:2017/11/19(日) 22:01:10.75 ID:3wAGigTa.net
フィボナッチってどこで使う場面があるのさ?競プロ?

284 :デフォルトの名無しさん:2017/11/19(日) 22:04:47.47 ID:CsMCJwUW.net
>>282
それは >>276 が「その代わり」ってちゃんと断ってるじゃん。
たいていの場合、両立なんてできないんだよ。

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


>>283
全くない。
だから、学ぶべきはフィボナッチ数列の作り方じゃなく、
宣言性を壊さないままメモ化する技術の方なんだが、
あの本にはその辺りのことは書かれていなかったような気がする。
メモ化フィボナッチは単なる例にとどまってたんじゃなかったか。

285 :デフォルトの名無しさん:2017/11/19(日) 22:31:12.52 ID:FtsW9SXJ.net
「あの本」?

286 :デフォルトの名無しさん:2017/11/20(月) 09:32:22.51 ID:2YC1SjJx.net
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.80 ID:ybEAOaLd.net
ghcコマンドやghciコマンドの出力メッセージの中で、
引用符が倍角文字になってるんだけど、これ半角に設定できないかな。

ターミナルで使ってるフォントの関係でかなり読みにくい。

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

というかscanlをmapで再実装するのがそんな最高なのかしら……

289 :デフォルトの名無しさん:2017/11/20(月) 23:56:42.78 ID:POIf14n/.net
foo (x:xs) = 〜(なんか関数)〜 (x:xs)

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

したとき、前者と後者は内部的に処理違ったりする?

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

・Coreを比較する
・プロファイルを比較する
・バイナリを比較する

291 :デフォルトの名無しさん:2017/11/21(火) 11:49:36.85 ID:Zx2Txvw4.net
>>288
普通ならリストが空か否かの場合分けで2行ぐらい書くところを
余再帰なら1行で書けるんだろ

292 :デフォルトの名無しさん:2017/11/21(火) 14:03:16.67 .net
>>224
C++ちゃんとできる


(ガサガサッ

(ビュンッ!

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

Haskellちゃんも見たかったなぁ…

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

まあ、そりゃそうだろって感じだが

295 :デフォルトの名無しさん:2017/11/21(火) 20:06:56.72 ID:NQH8f0G2.net
バイナリでは違いが出たよ

296 :デフォルトの名無しさん:2017/11/22(水) 00:50:08.76 ID:ovFpIkAx.net
コンパイル時刻

297 :デフォルトの名無しさん:2017/11/22(水) 09:20:37.07 ID:CArcd2ol.net
f (x:xs) = (x:xs) → case 引数 of _ -> x : xs
g a@(x:xs) = a →
だと

298 :デフォルトの名無しさん:2017/11/22(水) 09:28:04.15 ID:CArcd2ol.net
ミスった
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.65 ID:KMROYMtU.net
やってみた

https://ideone.com/6r6LpA

@パターンは不可反駁なんで、少しだけ違うね
9行目と31行目で a は不可反駁なんでワイルド扱い
15行目と37行目もまさに同じ点が違う

300 :デフォルトの名無しさん:2017/11/22(水) 10:27:32.10 ID:DL3EaaUj.net
stackoverflowで聞けば識者が的確に答えてくれそう

301 :デフォルトの名無しさん:2017/11/22(水) 18:10:15.64 ID:ovFpIkAx.net
最適化で消えるだろう

302 :デフォルトの名無しさん:2017/11/23(木) 04:31:10.10 .net
《問》(配点 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 .net
訂正(一行目)
× g がラムダ抽象の〜
○ g が括弧内のラムダ抽象の〜

304 :デフォルトの名無しさん:2017/11/23(木) 06:11:27.29 ID:S1VTy0fD.net
(->) は?

305 :デフォルトの名無しさん:2017/11/23(木) 09:12:04.55 ID:GxHnNEoE.net
>>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.72 ID:GxHnNEoE.net
表記ちょっとミスったけどまあ分かるでしょ

307 :デフォルトの名無しさん:2017/11/23(木) 09:16:33.82 ID:GxHnNEoE.net
ああ……

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

だ。肝腎のとこが抜けてる……寝よう……

308 :デフォルトの名無しさん:2017/11/25(土) 23:17:22.88 .net
>>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.93 ID:6YUjT6hC.net
>>308
それだと

¥x y -> (x + y)

ですらsupercombinatorにならんよ

310 :デフォルトの名無しさん:2017/11/26(日) 01:59:13.32 .net
むむむ…
(x+y)に現れる全てのラムダ抽象とはなんですか?

311 :デフォルトの名無しさん:2017/11/26(日) 07:38:30.34 ID:6YUjT6hC.net
>>310
この場合、(x+y)にはラムダ抽象が現れていないので条件(2)は空虚に充足されている
あとは条件(1)も充足されてるから、スーパーコンビネータになる

312 :デフォルトの名無しさん:2017/11/26(日) 12:17:18.61 ID:qOXUNg+f.net
>>308
subexpressionの定義が曖昧だな
例えば \ y -> x は \ x y -> x のsubexpressionか?

313 :デフォルトの名無しさん:2017/11/26(日) 13:55:44.55 ID:VpgSp9ND.net
純粋関数型どころか関数型言語のTDD本が無いのですが、
Java用に書かれた本に載っている方法論のどは、
Haskell で TDD を行う際にも取り入れられる事は多いですか?

例えば最近出た「テスト駆動開発」(Kent Beck著)など。
最初の方をチラ読みしたところ、大変読みやい印象を受けたので、
参考になればいいなと思いましたが、どうでしょうか。

314 :デフォルトの名無しさん:2017/11/26(日) 23:25:24.41 ID:k9PNaQXG.net
次の型があるとします。

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.34 ID:4PKE/tcf.net
>>314
言語拡張 PatternSynonyms,RecordWildCards を使うといけるようだよ。

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

として、後は t1@D1_ t2@D1_ のようにパターンマッチして利用する。

316 :デフォルトの名無しさん:2017/11/27(月) 00:44:20.26 ID:ZVUfUGVW.net
ていうか、 拡張使わなくても空レコードでパターンマッチできたはず

smallerThan (D1{}) (D1{})

みたいに。

317 :デフォルトの名無しさん:2017/11/27(月) 00:51:37.87 ID:ZVUfUGVW.net
ほれ
https://paiza.io/projects/EKoIGfBN48OP_bZZW2qlug

318 :デフォルトの名無しさん:2017/11/27(月) 07:38:07.20 ID:ysH8mXge.net
なるほど、空レコードでマッチングできる事を知りませんでした。
ありがとうございました。

319 :デフォルトの名無しさん:2017/12/02(土) 10:21:44.75 ID:SLnkjfbB.net
ある名前の型がどのモジュールで定義されているのか、
あるいはまだ定義されていないのかを hoogle で調べる事は出来るでしょうか?

320 :デフォルトの名無しさん:2017/12/02(土) 10:53:38.35 ID:pAxOhb0h.net
実際に hoogle つかってみりゃいいじゃないか

321 :デフォルトの名無しさん:2017/12/02(土) 12:27:16.11 ID:SLnkjfbB.net
>>320
すみません、かなり恥ずかしい勘違いをしていました。
できました。

322 :デフォルトの名無しさん:2017/12/06(水) 00:26:39.18 ID:4CiAHXyH.net
tanakhにはもっとhaskellの話をしてほしいよ

323 :デフォルトの名無しさん:2017/12/06(水) 00:47:59.63 ID:IlK1069D.net
haskellよりrust

324 :デフォルトの名無しさん:2017/12/06(水) 05:28:21.98 .net
tanakhには今だけはPEZYの話聞きたい

325 :デフォルトの名無しさん:2017/12/07(木) 18:59:33.65 ID:HvbKuO/f.net
GHCで、モナドの各インスタンスの(>>=)関数などの、型ではなく実装を見たい場合はどこを見ればいいのでしょうか
特にIOモナドが気になってます

326 :デフォルトの名無しさん:2017/12/07(木) 20:09:35.72 ID:RO0W0ydd.net
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.27 ID:RO0W0ydd.net
https://hackage.haskell.org/package/base-4.10.1.0/docs/src/GHC.Base.html

要するにこれね。

328 :デフォルトの名無しさん:2017/12/07(木) 20:30:31.60 ID:g7/WaViS.net
>>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.81 ID:Xz8G+NtW.net
caseは先に式を評価してからパターンに含まれる変数を束縛する

でもletには再帰があるかもしれないから先に変数束縛する
その変数を含むかもしれない式は遅延評価する

330 :デフォルトの名無しさん:2017/12/08(金) 00:12:07.08 ID:Hb+0BqaU.net
>>329
なるほど、そうだったんですね
勉強になりました、ありがとうございます

331 :デフォルトの名無しさん:2017/12/09(土) 22:36:37.66 ID:rGCS9XaY.net
Stack の LTS 9.17 に repa って無いのな

332 :デフォルトの名無しさん:2017/12/10(日) 00:28:18.35 ID:61nYDsc2.net
rapeならあるかも

333 :デフォルトの名無しさん:2017/12/13(水) 13:00:04.55 ID:BNG1q+wP.net
stackでパッケージをインストールする時にコンパイルしなくなったって話を聞いたけど本当ですか?
バイナリをダウンロードしてインストールするみたいな?
化石スペックの俺のパソコンでshellcheckのインストールで8時間以上かかった悪夢は解消されるの?

334 :デフォルトの名無しさん:2017/12/13(水) 13:14:20.26 ID:PKyEd910.net
【葬儀】たくさんの人があっけなく死んでいく
https://rio2016.5ch.net/test/read.cgi/sousai/1511694073/l50
【応報】藤原さやか『放射脳は恥ずかしい』→急死w
https://medaka.5ch.net/test/read.cgi/csaloon/1511952872/l50
【内乱罪】フクイチで核ミサイルを製造していた疑惑
http://rio2016.5ch.net/test/read.cgi/disaster/1511410332/l50

335 :デフォルトの名無しさん:2017/12/16(土) 19:22:25.34 ID:6IhxD8vU.net
abc予想の解決で再び圏論が注目を浴びそうだ

336 :デフォルトの名無しさん:2017/12/16(土) 19:57:24.58 ID:L7fV5ivU.net
Haskell->圏論って流れはあるけど
圏論やっててHaskellに興味を持つ人もいるのかな

337 :デフォルトの名無しさん:2017/12/16(土) 21:07:33.28 .net
圏論が何に役立つのか知らんけど、苦労して学んだ人が振り上げた拳の行き場が見当たらなくて
たまたま目についたHaskellをぶん殴ったんじゃないの
それは道端の石ころを蹴っ飛ばすように

338 :デフォルトの名無しさん:2017/12/16(土) 21:27:51.46 ID:eb/bER4l.net
数学は案外行き当たりばったりに問題が解決されている
圏論で判明した同型について、ある分野で解決されていて
ある分野においてすっぽ抜けているところがあれば、その問題は解決できるとみなせる
このように現状のとりとめのない数学を整理するために圏論はあると言えるかもしれない
よって圏論自身から新たに得られる情報はあまりないだろう
だからあまり研究も進まない・・・

339 :デフォルトの名無しさん:2017/12/16(土) 22:31:29.81 ID:L7fV5ivU.net
Ekmettさんとかはどういうスタンスなんだろう

340 :デフォルトの名無しさん:2017/12/17(日) 08:25:26.21 ID:Rl+JU+bv.net
圏論自体はものの見方とそのための記号だから、
圏論使ってる時点で、自分の応用分野もってるでしょう。
その場合、
圏論 -> universal algebra
圏論 -> functional programming
圏論 -> categorical stochastic relations
圏論 -> haskell
のように興味の対象が増える程度でhaskellだということに意味はなさそう。
圏論的アプローチは他の言語でもライブラリ群いろいろあるしね。

341 :デフォルトの名無しさん:2017/12/19(火) 05:44:21.31 ID:LTRWN5XC.net
プログラム・プロムナード/Haskellプログラミング-情報処理学会
http://www.ipsj.or.jp/magazine/promenade.html

342 :デフォルトの名無しさん:2017/12/19(火) 13:25:55.10 ID:fHF/6Dd9.net
bakeの開発が終了したようですが、
同じ趣旨のライブラリは他にありますか?

343 :デフォルトの名無しさん:2017/12/19(火) 23:53:10.07 ID:IjOdIEt7.net
この会社って言うたらそこまでの規模じゃないだろうし実態もよく分かってない感じなのに
なんつーか、『ある傾向の人間性』の社員が現時点ですら目立ち過ぎだろ…


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

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

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

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

http://www.data-max.co.jp/291219_dm1545_2/

344 :デフォルトの名無しさん:2017/12/20(水) 00:50:37.50 ID:L78Bpqe7.net
まずはお前が騙し取った金返して謝罪しろよ

345 :デフォルトの名無しさん:2017/12/20(水) 18:40:30.98 ID:Qm3pwgEV.net
tanakhさんはhaskellの日本での普及に貢献された方かもしれませんが
tanakhさんが勤める会社PEZY computingはhaskellとは関係ないのでは

346 :デフォルトの名無しさん:2017/12/20(水) 20:26:50.59 .net
二位じゃダメなんですか陣営に失脚させられたかな

347 :デフォルトの名無しさん:2017/12/20(水) 20:29:03.05 ID:WuO+qrMG.net
初心者なのでtanakhさんって方を知らないのですがどんな方なんですか?

348 :デフォルトの名無しさん:2017/12/21(木) 00:28:08.74 ID:vVg09BnX.net
tanakhさんは『すごい Haskell たのしく学ぼう!』の翻訳者の1人の田中英行さんのハンドルネームだよ https://twitter.com/tanakh
ちなみにもう1人の翻訳者の村主崇行さんは今年亡くなられた http://www.asj.or.jp/tennet/archives/msg07622.html

349 :デフォルトの名無しさん:2017/12/21(木) 00:42:32.53 ID:X50/c3iq.net
tanakhは簡単に言うとプログラミングが得意な屑

350 :デフォルトの名無しさん:2017/12/21(木) 00:46:16.46 ID:53ydh+Pj.net
>>348
今すごいHaskellの訳者紹介見直したら村主さんのコメントがめっちゃ真面目で泣きそう
大損失だな……

351 :デフォルトの名無しさん:2017/12/21(木) 03:19:48.25 .net
それでは本日の出場者を紹介してまいります。
先ずは田中英行。

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

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

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

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

猫が大好き。Haskellマスター 田中英行──

352 :デフォルトの名無しさん:2017/12/21(木) 03:46:15.12 ID:tLGR8mGR.net
つよい

353 :デフォルトの名無しさん:2017/12/21(木) 04:49:39.43 ID:UMfwMR6Z.net
京大首席合格(後期)

354 :デフォルトの名無しさん:2017/12/21(木) 06:35:36.91 ID:xu21FK50.net
プログラミングに関係ないプログラマの話は余所でやってほしい

355 :デフォルトの名無しさん:2017/12/21(木) 11:23:12.31 ID:hPrP3Uhu.net
諸君、議論したまえ

356 :デフォルトの名無しさん:2017/12/21(木) 12:28:48.94 ID:RWEMpEAi.net
競プロに出てくるような座標がコロコロ動いたり表を作るような問題をHaskellで上手く解くにはどうしたらいいでしょうか
手続き型では二次元配列を更新しまくればいいのですが
さすがに毎回takeとdropでリストを作り直すのは悪手ですよね?

357 :デフォルトの名無しさん:2017/12/21(木) 12:52:34.50 ID:xNbVMOX5.net
悪手かどうかはコンパイラに聞いてみればいいんだろ
配列を更新しまくったらコンパイルエラーになるのか?
コンパイラが信用できないならLispとかErlangとかを使えばいい

358 :デフォルトの名無しさん:2017/12/21(木) 12:55:55.14 ID:tLGR8mGR.net
関数型っぽく解決するにはどうすればいいかを聞いてるのでは

359 :デフォルトの名無しさん:2017/12/21(木) 12:59:59.71 ID:Pje/kUoS.net
競プロは時間・空間計算量にシビアだから

360 :デフォルトの名無しさん:2017/12/21(木) 13:17:02.58 ID:xNbVMOX5.net
競技プログラミングと関数型プログラミングの両立を目指すのは良いと思うよ
ついでに手続き型と関数型も両立すればもっと良い

361 :デフォルトの名無しさん:2017/12/21(木) 14:20:53.11 ID:V2XnJ2N1.net
C++でギリギリな問題でもない限りMapとかでもいけるけど
Mapで書きやすいかというとそうでもない

362 :デフォルトの名無しさん:2017/12/21(木) 15:30:56.14 ID:wep0AD/i.net
>>356
具体的な例を挙げてくれないか?

363 :デフォルトの名無しさん:2017/12/21(木) 16:35:55.75 ID:X50/c3iq.net
少なくとも報道をソースとするなら、斎藤社長は「詐欺を働いた」に等しいのよ。
平たく言うと「自分の意思で嘘をついた」と言い換えてもいい。

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

失敗やミスによるものと、虚偽によるものでは明らかに
社会や法のあつかいが異なる、そんなことも知らないのか、
知ってて敢えて誤魔化そうとしてんのかよぺジーのスパコン馬鹿は、って話。

364 :デフォルトの名無しさん:2017/12/21(木) 18:27:40.50 ID:dmM+x8ix.net
>>363
Haskellと関係ない話だろ
>>354を読めない人か

365 :デフォルトの名無しさん:2017/12/21(木) 18:36:28.75 ID:MPWX0Jf6.net
釣られるな

366 :デフォルトの名無しさん:2017/12/21(木) 19:45:14.05 ID:N1FJ2XDr.net
お前はスレチの馬鹿

367 :デフォルトの名無しさん:2017/12/21(木) 20:21:25.77 ID:6NVAqFid.net
最近毛の壁みないな

368 : :2017/12/22(金) 06:04:00.73 ID:Zf+4IlSz.net
>>367
あの情熱はぜひとも獲得したいと思っているのですが…

369 :デフォルトの名無しさん:2017/12/22(金) 12:35:38.59 ID:xKTA0owB.net
情熱だけで正しい知識が伴ってないとダメ

370 :デフォルトの名無しさん:2017/12/22(金) 12:46:49.98 ID:PrEChj7V.net
f = reverse . reverse

main = print $ f [1..10]

みたいに書いたときって、reverse関数が2回実行されますか?
結果が変わらないからされないですか?

371 :デフォルトの名無しさん:2017/12/22(金) 13:27:52.08 ID:xKTA0owB.net
そのままではされてしまいます。しかしメタプログラミングを用いて reverse . reverse を 静的に除去可能です

372 :デフォルトの名無しさん:2017/12/22(金) 13:46:49.38 ID:pcrnJTeB.net
そういう除去って、reverseは逆順だっていう知識をアプリオリに与えておくの?
それとも定義から解析して無意味じゃんって判断できるの?

373 :デフォルトの名無しさん:2017/12/22(金) 15:11:53.84 ID:cEn+RgaZ.net
RULES プラグマです。

374 :デフォルトの名無しさん:2017/12/22(金) 16:02:02.05 ID:pcrnJTeB.net
りょ。
サンクス

375 :デフォルトの名無しさん:2017/12/22(金) 16:36:48.40 ID:GFPkoNql.net
>>371
ありがとうございます
さすがに出来ないだろと思ってたんですが方法はあるのですね
プラグマはまだ明るくないのでもっと勉強します

376 :デフォルトの名無しさん:2017/12/22(金) 19:53:35.68 ID:6Ry8x8A0.net
foldl f a . reverse → foldr (flip f) a
みたいなルールはあってもいいかもね
reverse = foldl (flip (:)) [] だから
reverse . reverse == foldr (:) [] == id
後者の変換はghc標準でflipは簡約で消えると思う

377 :デフォルトの名無しさん:2017/12/23(土) 14:41:19.28 ID:9K72DzOx.net
pezyは嘘ついて補助金だまし取って、一部を私的に流用したから逮捕されたのに、
まるで開発が計画通り進まなかったから逮捕されたかのように
印象操作しているから悪質

378 :デフォルトの名無しさん:2017/12/23(土) 15:19:44.84 ID:97OmZxF2.net
べつに誰も何も言ってないだろ
おまいがそう解釈しただけでは

379 :デフォルトの名無しさん:2017/12/23(土) 15:21:59.98 ID:Jhot/ru+.net
Haskellと関係ない話なんだよな

380 :デフォルトの名無しさん:2017/12/23(土) 16:45:07.96 ID:UP/Zv3hx.net
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.49 ID:E55wgL+K.net
PEZYのスレ立ててそっちでやってください

382 :デフォルトの名無しさん:2017/12/23(土) 17:47:20.71 ID:RG/9qhez.net
>>380
runAppとは別の処理をrunAppの前後に入れるときにmainに書き足すだけで楽とかじゃね?

383 :デフォルトの名無しさん:2017/12/23(土) 19:57:22.35 ID:deN0FCLD.net
おれはmainに直接書くわ。Haskell以外でもそうしてる。

384 :デフォルトの名無しさん:2017/12/23(土) 20:06:53.43 ID:ZaJB/ccT.net
stackで新規プロジェクト作成するとmainからsomeFuncに飛んでるよね

385 :デフォルトの名無しさん:2017/12/23(土) 20:30:46.09 .net
そう…(無関心)

386 :デフォルトの名無しさん:2017/12/23(土) 22:07:15.33 ID:ePD34LgC.net
Advent Calendar催促おばさんが面白い

387 :デフォルトの名無しさん:2017/12/23(土) 23:15:34.86 ID:nlPzuvyg.net
>>380
runAppの処理を別のモジュールやアプリに組み込みたいとき、名前がmainだと困る、とか

388 :デフォルトの名無しさん:2017/12/23(土) 23:54:48.18 ID:UP/Zv3hx.net
>>382
楽かどうかという視点ならば、前後に入れるだけなら、
その手間は runApp 関数の中に入れるのと同程度ではないか?

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


>>387
runApp 関数内にそのアプリ専用のエントリポイントが書かれたものしか見たことがなく、
それを別のモジュールやアプリに組み込むという状況が想像できないのだが、
具体的にどういう事なのだろう?
その場合、関数名が main だとなぜ困るのだろう?

389 :デフォルトの名無しさん:2017/12/24(日) 02:26:59.79 ID:0qLezeKt.net
>>378
社員が総出でtwitterで開発が上手くいかなかったから詐欺にされたって
デマ流しまくっているじゃん

390 :デフォルトの名無しさん:2017/12/24(日) 07:27:03.02 .net
最近毛の壁みないな

391 :デフォルトの名無しさん:2017/12/24(日) 13:10:48.98 ID:L0WbVZsM.net
壁毛ならマ板にスレあるよ

392 :デフォルトの名無しさん:2017/12/25(月) 01:09:51.28 ID:KmZOPanU.net
pythonにはxonshとかいうシェル言語があるらしい
http://vaaaaaanquish.hatenablog.com/entry/2017/11/30/175236
これのHaskellバージョンがあれば便利じゃないか。
Haskellとの親和性は高いと思う。シェルスクリプトって要はコマンドのコンビネータだし、コマンド呼び出しの構文は関数適用によく似てる。

393 :デフォルトの名無しさん:2017/12/25(月) 01:12:38.31 ID:KmZOPanU.net
ただ、ls -a -l -d hoobar みたいなのをシームレスに書くのはチャレンジングな課題だ。
引数の文字列リテラルのリストなどをコマンドラインにイチイチ打ち込むのは面倒くさい。
RebindableSyntaxでマイナスを定義し直して、、いや、悪手っぽいか。
なるべくHaskellを書いていきたい。いちばん身近なところを置き換えられたなら、とても良い。

394 :デフォルトの名無しさん:2017/12/25(月) 05:14:44.74 ID:/fea/C1E.net
haskellバージョンのイメージわかないけど
haskellシェルは何がどう便利になるというの?

395 :デフォルトの名無しさん:2017/12/25(月) 12:02:29.99 ID:EPafu7oO.net
pythonの真似だから便利さもpythonと同じになる計画なんだろ
同じにならなかったら、計画通りに行動しなかった奴が戦犯で、計画立てた奴は無罪

396 :デフォルトの名無しさん:2017/12/25(月) 12:28:50.13 ID:F9gRwc9o.net
Haskellシェルだとhsshとかになるん?

397 :デフォルトの名無しさん:2017/12/26(火) 01:06:43.66 ID:ntWKYT9z.net
シェルスクリプトを使えばいいと思う
なぜコマンドの実行にHaskellを使う必要があるのか

398 :デフォルトの名無しさん:2017/12/26(火) 11:29:24.52 ID:zQBvuC0m.net
まあconfigureスクリプトにはm4とかいうプリプロセッサがあるから意外と難しいよな

399 :デフォルトの名無しさん:2017/12/29(金) 04:23:00.56 ID:PWPZaOro.net
EzoeがいつHaskellに飽きて堂々とディスり始めるのか楽しみ

400 :デフォルトの名無しさん:2017/12/29(金) 05:30:43.56 ID:dUewwmlf.net
ガチC++erから見たHaskellというのに少し興味が湧いている

401 :デフォルトの名無しさん:2017/12/29(金) 05:56:52.00 ID:xARFptR0.net
仕様壊れてるC++に慣らされきった人間にHaskellの厳格さの価値がわかるのかねぇ
静的型不要論的な妄言吐きそう

402 :デフォルトの名無しさん:2017/12/29(金) 13:11:23.08 .net
江添っぽさがふんだんに盛り込まれていてよい

403 :デフォルトの名無しさん:2018/01/01(月) 12:12:22.18 ID:bFOlOWpA.net
この人は本当にプログラム書けるのかと不安になることがあるよな。
はっきり言ってc++普及に関しては逆効果をあげてるとしか思えん。

404 :デフォルトの名無しさん:2018/01/01(月) 16:00:21.64 ID:pGnY0Ifz.net
芸人だと思って見てるわ

405 :デフォルトの名無しさん:2018/01/01(月) 16:42:32.16 ID:O/UW/N2W.net
老害の見本

406 :デフォルトの名無しさん:2018/01/01(月) 16:44:34.98 ID:QrIEjumd.net
ローカルマシンにある jenkins において、haskell コードのビルドに stack を使いたいのですが、
その際に環境変数として HOME が設定されていないと使えません。

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

スレチでしたらすみません。

407 :デフォルトの名無しさん:2018/01/01(月) 18:03:12.68 ID:TBixhmIP.net
>>406
jenkinsはわからないがstackはどうやら $HOME 直下に .stack ディレクトリを作って
そこに(必要なら)ghcとかをインストールするらしい。
例えばconfig.yamlもそこに入っているので、普段の$HOMEにそれがある場合は、jenkinsでのビルドと設定が変わってしまう。
とはいえ、このファイルが働くのは特定のプロジェクトに属さない動作のとき(stack newとか)だけっぽいので、
ディスクの容量が切迫してるとかでない限り、問題ないんじゃないかな。

408 :デフォルトの名無しさん:2018/01/02(火) 00:37:55.48 ID:hQQ1WWOS.net
C#しか知らない大学生なんだが関数型を理解したいんだが何すれば

409 :デフォルトの名無しさん:2018/01/02(火) 01:13:22.41 ID:wAfZ+SpV.net
H本を読む

410 :デフォルトの名無しさん:2018/01/02(火) 01:16:32.50 ID:hQQ1WWOS.net
F#と比べてどれがいい?

411 :デフォルトの名無しさん:2018/01/02(火) 01:21:41.45 ID:wAfZ+SpV.net
は?勉強目的なら言語名でググって検索件数が多いやつのほうが解決策見つけやすいだろHaskell一択だろぉ

412 :デフォルトの名無しさん:2018/01/02(火) 01:44:03.46 ID:9JghhVFB.net
まずHの練習からしたほうがいい

413 :デフォルトの名無しさん:2018/01/02(火) 01:59:58.11 ID:hQQ1WWOS.net
>>411
そうなんですか

414 :デフォルトの名無しさん:2018/01/02(火) 02:11:04.88 ID:bfdSjs8c.net
F#もいいけどまずはHaskellの純粋さに感動してからの方が良いよ

415 :デフォルトの名無しさん:2018/01/02(火) 08:11:19.29 ID:hHAEZ1EB.net
言語仕様はもちろんとして純粋関数型のデータ構造やアルゴリズムも合わせて学習しないと手詰まりになる

416 :デフォルトの名無しさん:2018/01/02(火) 13:53:49.75 ID:2m2cwFbr.net
状態マシンでなく関数合成に持ち込む為の定番手法,
例えばiteratee?とかの知識も知りたい。

417 :デフォルトの名無しさん:2018/01/03(水) 00:36:59.01 ID:Mw/JDaoF.net
なぜ関数プログラミングは重要か
http://www.sampou.org/haskell/article/whyfp.html

418 :デフォルトの名無しさん:2018/01/03(水) 00:53:21.23 ID:EBTl2OcL.net
関数型脳を鍛えるにはHaskellがよい

419 :デフォルトの名無しさん:2018/01/03(水) 01:24:32.28 ID:wPBJzesv.net
プラグマとかシンタックスシュガーのオプションがやたらあって、
古い構文がデフォルトでなくなったり、いまだに安定してないイメージが強い

420 :デフォルトの名無しさん:2018/01/03(水) 03:21:56.48 ID:Mw/JDaoF.net
安定してるプログラミング言語ってあんの?

421 :デフォルトの名無しさん:2018/01/03(水) 04:47:00.22 ID:JH/i0Zss.net
拡張の数は標準の安定性と関係ないし非推奨になった構文も知る限り2,3個程度しかないし言うほど安定してなくはないと思うよ
主要な拡張の破壊的変更も多ければ不安定だがそこは知らん

安定してる言語の話題たまに出るけどどの言語もそれなりに不安定という結論以外になったとこ見たことない

422 :デフォルトの名無しさん:2018/01/03(水) 10:58:30.19 ID:HUvqSveQ.net
>>420
そらLispよ

423 :デフォルトの名無しさん:2018/01/03(水) 13:51:49.16 .net
枯れ

424 :デフォルトの名無しさん:2018/01/03(水) 19:39:52.12 ID:JH/i0Zss.net
そういや使用安定してるからで極地でCLが使われてたな

425 :デフォルトの名無しさん:2018/01/03(水) 19:43:20.34 ID:3L8KTbvi.net
x86アセンブラ、めっちゃ枯れてますよ。

426 :デフォルトの名無しさん:2018/01/04(木) 01:39:52.22 ID:T+TxDQDt.net
https://i.imgur.com/uOo7sWV.gif

427 :デフォルトの名無しさん:2018/01/05(金) 10:31:44.65 ID:HcxYMAOQ.net
>>407
アドバイスありがとうございました。
参考にします。

428 :デフォルトの名無しさん:2018/01/06(土) 13:51:16.58 ID:JNGs0wZB.net
再帰ってわかりにくくないですか?
実際によく使われているんですか?

429 :デフォルトの名無しさん:2018/01/06(土) 14:01:05.48 ID:NNbzWCOQ.net
扱うデータ構造が再帰的なら(連結リストとか木とか)
アルゴリズムも再帰の方が自然

430 :デフォルトの名無しさん:2018/01/06(土) 14:28:29.03 .net
初見だと脳のワーキングメモリをオーバーフローして拒絶反応を示すけど
慣れたら問題先送りにしちゃって尚且つ最後には解決しちゃう魔法みたいで気持ちいいよ

431 :デフォルトの名無しさん:2018/01/06(土) 14:36:45.23 ID:knmVGZUA.net
ループより再帰が好きだけどスタック気にしたりわざわざ末尾再帰にしなきゃいけなかったりするのは割とめんどい

432 :デフォルトの名無しさん:2018/01/06(土) 17:33:04.10 ID:CqdhyGHO.net
breakとcontinueとreturnとthrowは関数ではない
関数ではないものを見るとマクロを書きたがるのがLisp
Haskellはマクロを使わない技術が発達したからなんでも関数を使う

433 :デフォルトの名無しさん:2018/01/06(土) 18:38:34.20 ID:ttApPSmY.net
HaskellはCのプリプロセッサ(俗に言うマクロ)を使えるのでは

434 :デフォルトの名無しさん:2018/01/06(土) 22:41:09.20 ID:dYI3l1P4.net
エラーの原因を教えて下さい
https://ideone.com/yGg3zM#stdin

435 :デフォルトの名無しさん:2018/01/06(土) 23:19:28.76 ID:knmVGZUA.net
>>434
はい
https://ideone.com/0gDEIW

436 :デフォルトの名無しさん:2018/01/06(土) 23:31:44.70 ID:ttApPSmY.net
エラーの原因を教えてほしいという奴にエラーの原因を教えないのがHaskellerか
また同様のエラーが出てもこのスレにくればコード書き直してやるよっていう優しさか

437 :デフォルトの名無しさん:2018/01/07(日) 00:03:32.13 ID:CSD5n8Vo.net
ハスケラーならコードで会話できるだろ?

438 :デフォルトの名無しさん:2018/01/07(日) 00:18:57.89 ID:gMArQtmD.net
Windows10でstackのプロジェクトをbuildするとエラーが出てビルド出来ないお(´・ω・`)

While building custom Setup.hs for package ........
..
..
..
Process exited with code: ExitFailure 1

439 :デフォルトの名無しさん:2018/01/07(日) 00:26:59.29 ID:dTX3sH72.net
ボウヤは『windows10 haskell stack build error』でググるとかはしたのかい?

440 :デフォルトの名無しさん:2018/01/07(日) 00:50:52.73 .net
飢える者に魚を与えても一日しか救えない
釣りを教えれば一生救えるやもしれぬ
してみれば、>>435は魚を与えたのじゃ

441 :デフォルトの名無しさん:2018/01/07(日) 01:00:14.22 ID:r/irtiIZ.net
賢者乙

442 :デフォルトの名無しさん:2018/01/07(日) 01:20:55.91 ID:gMArQtmD.net
>>434
>>435
条件ミスってて全部otherwiseに行ってたのも直したらちゃんと動きました
ありがとうございます

443 :デフォルトの名無しさん:2018/01/07(日) 08:44:45.58 ID:zleJ4q+h.net
>>438
Windowsで動かないパッケージ使ってるとか?

444 :デフォルトの名無しさん:2018/01/07(日) 18:07:55.57 ID:HpBedZUr.net
>>428
好き嫌いというか、ループはループ中で変数を操作するから値を返せるのであって、変数を言語から排除すれば自然にループも排除されるんじゃないの?

ループがあっても再帰が不要にはならない。でも再帰があればループ不要は本当の話。だからこそ変数を排除した言語があるんでしょ。

445 :デフォルトの名無しさん:2018/01/07(日) 20:35:35.56 ID:gMArQtmD.net
>>438 の原因はプロジェクトのパスに日本語が含まれているからでした...orz

446 :デフォルトの名無しさん:2018/01/07(日) 21:17:59.03 .net
悲しいかな

447 :デフォルトの名無しさん:2018/01/08(月) 01:26:04.04 ID:LRSoqKZx.net
haskellプログラミングできたンゴ
https://i.imgur.com/rzM37pq.png

448 :デフォルトの名無しさん:2018/01/08(月) 01:40:46.80 ID:6LQHZKeL.net
挿入ソートか やるじゃん

449 :デフォルトの名無しさん:2018/01/08(月) 02:31:15.01 ID:oivpkpFd.net
>>447
toBarの仕事はもっと少なくした方がいいよー
ソートとかは既存関数で手抜きしたけど、参考までに
https://ideone.com/fGFOEl

450 :デフォルトの名無しさん:2018/01/08(月) 10:11:27.13 ID:ai+lPEJ3.net
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.14 ID:ai+lPEJ3.net
>>450
実行しないでビルドだけ行うのは --no-run-tests オプションを付けることで実現できましたが、
それでもまだ cmd-exe の方も同時にビルドされてしまいます。

452 :デフォルトの名無しさん:2018/01/08(月) 13:58:59.98 .net
Haskell、その学習に多大な苦労を強いる割に遅過ぎないですかね
http://benchmarksgame.alioth.debian.org/u64q/haskell.html

453 :デフォルトの名無しさん:2018/01/08(月) 14:07:49.41 ID:jbPveYoe.net
普通の言語のできない数学者がプログラミングできるようにするための言語だ
彼らにはたやすい

454 :デフォルトの名無しさん:2018/01/08(月) 14:17:08.35 ID:LRSoqKZx.net
速さよりもバグの少なさが長点なのでは...

455 :デフォルトの名無しさん:2018/01/08(月) 15:59:26.22 ID:eAAAEsR7.net
デフォルト遅延評価に破壊的更新超苦手とかいうパフォーマンス的には冗談みたいな存在なのに
静的型付コンパイルというだけでVMアンチ勢から謎の期待を向けられる言語Haskell

456 :デフォルトの名無しさん:2018/01/08(月) 16:35:37.59 ID:puck2ipT.net
この先haskellで良いGUIフレームワークって出ると思う?

457 :デフォルトの名無しさん:2018/01/08(月) 16:52:31.19 ID:ai+lPEJ3.net
>>456
現行のGUIフレームワークの問題点は何でしょうか?

458 :デフォルトの名無しさん:2018/01/08(月) 16:54:40.06 ID:edhbuhXG.net
汎用かつネイティブの作法に従うものがいいなぁ。

459 :デフォルトの名無しさん:2018/01/08(月) 21:39:25.30 ID:fNfSzvO3.net
>>452

いつからHaskellの5行クイックソートが遅いと錯覚していた? - Qiita
https://qiita.com/as_capabl/items/39e55e7a035dea4dc93a

460 :デフォルトの名無しさん:2018/01/08(月) 22:56:46.89 ID:LRSoqKZx.net
おまえらってIDE何使ってるの?

461 :デフォルトの名無しさん:2018/01/09(火) 07:52:35.28 ID:jdJt8oqE.net
>>459
>Haskellは遅延評価なので、リストを返す関数だからといって中間データとしてのリストを必ず作成する訳ではありませんから、
>結果を即座にfromListで書き込めば実質的に配列を出力する事が可能です。
ほんとぉ?
もう融合変換なんていらんやん

462 :デフォルトの名無しさん:2018/01/09(火) 11:11:12.53 ID:4pyxMvRN.net
中間データが不要(融合変換が不要とは言ってない)

463 :デフォルトの名無しさん:2018/01/09(火) 11:23:20.89 ID:jdJt8oqE.net
せやな
リストのfold/buildやな

464 :デフォルトの名無しさん:2018/01/09(火) 13:28:03.42 ID:4pyxMvRN.net
まあグラフ簡約がなかったらどうなるか実験した方がいいと思う

465 :デフォルトの名無しさん:2018/01/09(火) 22:16:54.64 ID:zX7pY+gm.net
>>455
遅延評価=遅いって考える理由は?

466 :デフォルトの名無しさん:2018/01/09(火) 22:55:36.65 ID:0kb7P5He.net
>>465
ほとんどの場合サンクを作るのは無駄だし最適化にも不利

467 :デフォルトの名無しさん:2018/01/10(水) 00:53:00.88 .net
haskellのコンパイルエラーメッセージが難解すぎる

468 :デフォルトの名無しさん:2018/01/10(水) 00:56:33.80 .net
どうすれば直るか教えて下さい。
https://ideone.com/VhTqZE

469 :デフォルトの名無しさん:2018/01/10(水) 01:23:11.48 ID:2r/l0e/u.net
>>468
問題があるのは10行目 return (shuffle (i - 1) flipped)
これの型は実際には、IO (IO [Int]) だが期待されているのは IO [Int] だ。
IO(などのモナド) に包むために使われる return はここでは不要。外すと IO [Int] になってコンパイル通る。

470 :デフォルトの名無しさん:2018/01/10(水) 01:29:37.26 ID:2r/l0e/u.net
>>460
> おまえらってIDE何使ってるの?
>>73 あたりで同じ質問があった。VSCode, spacemacs が人気

471 :デフォルトの名無しさん:2018/01/10(水) 01:29:51.07 .net
なるほど!

472 :デフォルトの名無しさん:2018/01/10(水) 18:04:01.49 ID:CldIXwzW.net
>>455
この話をすると決まってStrict拡張を持ち出してくるのが痛いHaskellerの特徴だな
じゃあ最初から遅延評価なんかすんじゃねえよ

473 :デフォルトの名無しさん:2018/01/10(水) 20:08:59.81 ID:YX2ZZ0s/.net
パフォーマンス的にはC/C++が王道だから素直にFFIを持ち出すのが王道
C/C++とFFIを無視するのは某言語の痛い特徴だよ

474 :デフォルトの名無しさん:2018/01/10(水) 21:51:06.06 ID:CldIXwzW.net
久々にHaskellで簡単なプログラム書いたんだけど
構造体使うだけでStateモナドもlensも必要になるあたりやっぱ欠陥言語だなこれ
最初から言語機能にいれとけや

475 :デフォルトの名無しさん:2018/01/10(水) 22:51:06.88 .net
bindは1つの引数しかできないんですか?
アプリカティブスタイルを使わないと無理ですか?
https://qiita.com/7shi/items/85afd7bbd5d6c4115ad6

476 :デフォルトの名無しさん:2018/01/11(木) 00:40:52.51 ID:vZTNKaQ4.net
>>466
その理屈だと遅延評価しない方は更に遅いじゃん。

477 :デフォルトの名無しさん:2018/01/11(木) 11:20:18.33 ID:OitKCfql.net
欠陥のない言語があるならぜひ知りたいなあ

478 :デフォルトの名無しさん:2018/01/11(木) 11:34:32.09 ID:yR+nWLrx.net
クラスより構造体
メソッドよりフィールドが必要という常識を取り戻すだけで十年単位の時間がかかる

479 :デフォルトの名無しさん:2018/01/11(木) 16:22:14.98 ID:I4QPsg6T.net
>>476


480 :デフォルトの名無しさん:2018/01/11(木) 16:32:20.02 ID:+cHMvoU8.net
haskellでできることは他の言語だと難しくて
他の言語だと簡単なことはhaskellだと難しいという

481 :デフォルトの名無しさん:2018/01/11(木) 23:26:54.83 ID:CSSFSU7v.net
>>480
変態言語やん

482 :デフォルトの名無しさん:2018/01/11(木) 23:57:27.46 ID:kh3sTkz1.net
それ、褒め言葉やで

483 :デフォルトの名無しさん:2018/01/12(金) 01:48:25.78 ID:GmCW/u04.net
スクリプト言語を許容できてHaskellをその性能から許容できないというのは理解できない感覚

484 :デフォルトの名無しさん:2018/01/12(金) 11:48:37.84 ID:xeu4OQ73.net
感覚ではなく統計の取り方がそうなってるんだな
シェルスクリプトなんてプログラムのコンパイル時と起動前に実行するやつだから
起動するまで何分待たされてもベンチマークには関係ないから

485 :デフォルトの名無しさん:2018/01/14(日) 11:36:12.66 ID:OihlBKK7.net
型推論まわりを雰囲気で使っていました。
初等的なケースではそれでも問題なかったんですけど、
OVERLAPS とか type family とか出てきてから付いていけなくなりました。

助けてください。
https://ideone.com/XQ17ms

486 :デフォルトの名無しさん:2018/01/14(日) 23:23:09.38 ID:ppap/O0M.net
性能からって話はないな。
主にファイルIOやネットワークIOの気軽さの問題だと思うけど。

487 :デフォルトの名無しさん:2018/01/14(日) 23:30:08.22 ID:fSoR9A9v.net
初心者だから適当だけどそこら辺はバンバンFFI使えばいいんじゃないのとか思ってしまう
そういうもんでもないのか

488 :デフォルトの名無しさん:2018/01/14(日) 23:51:01.69 ID:Qz3+ZXNT.net
>>485
https://teratail.com/

489 :デフォルトの名無しさん:2018/01/15(月) 00:04:51.86 ID:bAToeOxa.net
Stream Fusionの御利益を受けるには、
vectorパッケージでmapとかfoldみたいなので書けるところはすべて書いていく、
という方針でおけ?

490 :デフォルトの名無しさん:2018/01/15(月) 00:57:56.87 ID:NOFCncFl.net
>>488 そのサイト、人いないような… とりあえずありがとうです。

491 :デフォルトの名無しさん:2018/01/15(月) 08:59:07.15 ID:Duolqkdz.net
>>485
本質的にはこれと同じかな
https://ideone.com/hIoLnD
undefinedは()にもなれるから失敗してるみたい?

492 :デフォルトの名無しさん:2018/01/15(月) 18:46:49.75 ID:v1U8cihy.net
>>485
Freer Effectsが、だいたいわかった: 11-7 OVERLAPSプラグマ - Qiita
https://qiita.com/YoshikuniJujo/items/6b57a2778b04f54cac1e#_reference-98a5024f7096c614804a

493 :デフォルトの名無しさん:2018/01/16(火) 00:59:29.28 ID:4jams3dQ.net
>>485
横レスですが
(Hoo b ~ HooBar)
(b ~ Bar)
これのチルダってどういう意味なんですか(当方初心者です・・・)

494 :デフォルトの名無しさん:2018/01/19(金) 00:29:15.30 ID:ZfC+YGVh.net
haskell普及させたい言うわりには初心者に優しくない

495 :デフォルトの名無しさん:2018/01/19(金) 00:41:33.13 ID:bqrf+XbL.net
どちらかというと初心者から中級者になるまでのミッシングリンクが上手く埋められてない
H本の次のレベルにふさわしいものがないと言ったほうがいいか

496 :デフォルトの名無しさん:2018/01/19(金) 00:53:08.18 ID:ZfC+YGVh.net
それhaskell以外の言語でもだいたいそうじゃね?

497 :485:2018/01/19(金) 01:45:02.15 ID:uCK/Ej3G.net
皆様ありがとうございました。勉強しました。

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

今回のケースで出たどのコードも単一化は通ってるんだけど、帰結の処理の際にエラーが出ていると思います。
>> 491 さんが単純化してくれたケースは、ご指摘の通り undefined がどちらのインスタンスにもなりうるため、"あいまいだ"という旨のエラーが出ていました。
これは例えば OVERLAPPING を INCOHERENT に置き換えると通ります。テキトウな順になるということです(OVERLAPSの解説は頂いた重城サンの記事(>> 492)が参考になりました)。

498 :485:2018/01/19(金) 01:45:29.89 ID:uCK/Ej3G.net
元の >> 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.43 ID:qWabwUd0.net
>>495
リスト本読め

500 :デフォルトの名無しさん:2018/01/19(金) 15:11:02.24 ID:uCK/Ej3G.net
>>450
stack で指定したターゲット以外の余計なものがビルドされてしまう問題は、バグの可能性があります。
https://github.com/commercialhaskell/stack/issues/1406

501 :デフォルトの名無しさん:2018/01/20(土) 08:32:17.48 ID:lXdHdJ+E.net
Haskellの型コンストラクタがいまいち理解できなかったけど、ラムダキューブでやっと理解できた。
ポリモーフィックな関数と所謂依存型とセットなんだね。

型コンストラクタとそいつで作られる型がオーバーロードできるのは、紛らわしい気がする。

502 :デフォルトの名無しさん:2018/01/20(土) 09:37:30.01 ID:/5XEeDZf.net
>>494
何となく学習じゃあ、解決したい問題領域が曖昧なままだからな、何やっても難しく感じるよ。

503 :デフォルトの名無しさん:2018/01/20(土) 16:49:26.40 ID:I7uywYWL.net
もし依存型があったらリストの長さにより異なる型を使うね
でも遅延評価はリストの長さが有限でも無限でも同じ型にする
相性悪そう

504 :493:2018/01/20(土) 18:46:54.97 ID:oxqYKpr1.net
>>498
ありがとうございます

505 :デフォルトの名無しさん:2018/01/24(水) 05:27:57.73 ID:/4CMqd4L.net
hieとVSCode使ってるんだが、ドキュメントや入力候補が「読み込んでます」ってなって一向に読み込まれないんだが
お前らは問題なく使えてるの?っていうかどんな環境でやってる?

506 :デフォルトの名無しさん:2018/01/24(水) 06:36:24.95 ID:EfrrCAID.net
https://csacademy.com/code/ofIwdZBg/

くだらない

507 :デフォルトの名無しさん:2018/01/24(水) 18:54:42.65 ID:A4/TKZVr.net
csacademyってコード貼り付けサイトして定着してんの?

508 :デフォルトの名無しさん:2018/01/27(土) 12:07:53.22 ID:3P02pcTc.net
Haskellの良いところは宣言的であることです。
宣言的であるということはCSSのように素人には使いこなせないということです。
素人には使いこなせなくすることでウェブデザイナーという奇妙な職業が生まれました。
同様にHaskellもハスケラーという新たな職業を生み出す可能性があります。

509 :デフォルトの名無しさん:2018/01/27(土) 17:18:06.19 ID:Y4G+sRnH.net
コードの質の下限が他の言語より高いなとは思う
例えばPHPなんかは、プログラマの能力によって質の良し悪しのギャップが非常に大きい
それに対してHaskellは、上を見たらキリがないが、下を見てもコンパイルエラーを起こさない時点である程度の質が担保されてる
その分覚えることが多いし、短期的な開発効率も下がりそうだけど、長い目で改修や保守を考えると悪くなさそう

510 :デフォルトの名無しさん:2018/01/27(土) 17:19:06.86 ID:Y4G+sRnH.net
>>509
PHPと比べてもしょうがないな…Javaあたりに読み替えといてください

511 :デフォルトの名無しさん:2018/01/27(土) 19:16:11.49 ID:S0om7f3c.net
> コードの質の下限が他の言語より高いなとは思う

>>133

512 :デフォルトの名無しさん:2018/01/31(水) 04:05:44.40 ID:hDoqvddW.net
入門書
入門書
入門書
 :
Haskell 中級書出して

513 :デフォルトの名無しさん:2018/01/31(水) 04:10:45.92 ID:hCnyArbk.net
Effective Haskell ください

514 :デフォルトの名無しさん:2018/01/31(水) 07:45:42.81 ID:jydCvtlX.net
Haskell Wikibooksとか中上級くらいでないの?

515 :デフォルトの名無しさん:2018/01/31(水) 18:11:04.78 ID:F9QE8ZcE.net
「プログラミングHaskell」(Graham Hutton (著),&#8206; 山本 和彦 (翻訳))
って入門者向け?

516 :デフォルトの名無しさん:2018/01/31(水) 18:19:54.71 ID:6Wa3kgEE.net
>>515
入門者向けには難しい
入門書を読み終えた初心者には物足りない
そんな本

517 :デフォルトの名無しさん:2018/02/01(木) 08:00:02.87 ID:Xuh9WGFR.net
ghci で
> let x :: (a ~ Int) => a;x = undefined
として実際の型をみると
> :t x
x :: Int
に変わっている。これはどういう仕組みによるもの?

518 :デフォルトの名無しさん:2018/02/02(金) 14:28:38.64 ID:iEY/rJwQ.net
引数が Show a だったらTrue, 違ったら False を返す関数
isShow :: a -> Bool
は可能ですか?

519 :デフォルトの名無しさん:2018/02/02(金) 20:19:41.59 ID:NSR+boPa.net
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.24 ID:PIo4kucW.net
https://wiki.haskell.org/GHC/AdvancedOverlap
これは自前でインスタンスの一覧作ってる

521 :デフォルトの名無しさん:2018/02/03(土) 00:14:03.29 ID:st4XedSX.net
このコード中に isShow というのがある

https://hackage.haskell.org/package/fitspec-0.4.4/docs/src/Test-FitSpec-Derive.html

522 :518:2018/02/03(土) 00:59:05.30 ID:z/YnSxMM.net
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.34 ID:GVlapN64.net
すみません、
Huttonの「プログラミングHaskell」で
学習をしているのですが
練習問題の解答が
著者や役者のサイト等を見ても見当たらなく
もし掲載のページを知ってたら教えて下さい。

524 :デフォルトの名無しさん:2018/02/04(日) 04:24:30.53 ID:fRCSu2fr.net
プログラミングHaskell 訳者によるサポートページ
http://www.mew.org/~kazu/doc/book/haskell.html
> 練習問題の答は、原著者のサポートページにあります。

525 :523:2018/02/04(日) 12:22:57.81 ID:VtcsF5YK.net
>>524
すみません。
原著者のサポートページでは回答例を見つける事ができませんでした。
翻訳されていないの新版には回答例が掲載されているようですね。

526 :デフォルトの名無しさん:2018/02/04(日) 14:14:55.60 ID:+WAJGnPT.net
コード例とかならここにあるみたいだけど
http://www.cs.nott.ac.uk/~pszgmh/book-old.html

527 :デフォルトの名無しさん:2018/02/04(日) 19:26:34.09 ID:VtcsF5YK.net
>>524 >>526

ありがとうございます。
学習の参考にさせて頂きます。

528 :デフォルトの名無しさん:2018/02/22(木) 01:33:31.18 ID:rShSr6qS.net
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 -- 通らない

529 :526:2018/02/23(金) 11:53:44.22 ID:QhNOj82G.net
ghcを8.0.2 から 8.2.2に上げた。
h = y :: a -> a -- 通るようになった

530 :デフォルトの名無しさん:2018/03/05(月) 00:25:18.18 ID:rygpwPFq.net
このコンテストに参加してるHaskellerたったの6人と少ないのでチミたちも参加したまえ

https://www.codingame.com/leaderboards/challenge/botters-of-the-galaxy/global?column=slanguage&value=Haskell

531 :デフォルトの名無しさん:2018/03/08(木) 07:40:29.03 ID:NOpOgpfl.net
emacsでSymbols function definition is void: haskell-debug
てエラー文が出ちゃうんですが、原因わかる人いませんか、、
正確にはspacemacsのinteroです、、

532 :デフォルトの名無しさん:2018/03/12(月) 03:18:18.08 ID:IKn+w3cq.net
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.32 ID:IdW8RVi3.net
裁判所でもこんなあほなことやらん

534 :デフォルトの名無しさん:2018/03/12(月) 06:27:09.63 ID:uoSNo/WD.net
スレチの相手するなバカ

535 :デフォルトの名無しさん:2018/03/12(月) 07:14:31.89 ID:IKn+w3cq.net
Haskellで一番売れている本の訳者様だぞ

536 :デフォルトの名無しさん:2018/03/12(月) 11:28:56.92 ID:67958OQ2.net
著者じゃなく訳者程度ってのをよく示しているのでは

537 :デフォルトの名無しさん:2018/03/12(月) 12:35:28.53 ID:jLS1yZxx.net
売上データを証拠として提出する発想が裁判所だな
裁判の真似事をやってるのは統計学者だ

538 :デフォルトの名無しさん:2018/03/12(月) 12:37:27.36 ID:Z6lm3+Nm.net
過疎を理由にスレチを正当化してはいけない

539 :デフォルトの名無しさん:2018/03/12(月) 17:16:39.91 .net
最近毛の壁みないな

540 :デフォルトの名無しさん:2018/04/03(火) 13:16:07.09 ID:CL00mLmV.net
モナドの中での条件分岐ってはどうやればいいでしょうか

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

【 】のブロックを条件に応じて呼び出すかどうかを制御したいです
whenだと値が取り出せない

541 :デフォルトの名無しさん:2018/04/03(火) 13:25:16.21 ID:CL00mLmV.net
自己解決しました
普通にif使えるんですね

542 :デフォルトの名無しさん:2018/04/03(火) 16:36:19.17 ID:bMx8P0pN.net
遅延評価って面白いね
ぱっと見挙動がわかりにくいのと使い所がみつけづらいのが難点だけど

543 :デフォルトの名無しさん:2018/04/03(火) 20:15:57.85 ID:BMbwb1La.net
https://twitter.com/fujiy0/status/980831517973688325

Haskellのビジュアルプログラミング面白そうだけど面倒そうでもあるね

544 :デフォルトの名無しさん:2018/04/13(金) 01:52:39.63 ID:UkwKelSp.net
purescriptをめっちゃ強化してクロスコンパイル&ネイティブコンパイル&jsコンパイル&wasmコンパイル可能でさらにビルド速度とGC性能をocaml並に出来ませんか😱

545 :デフォルトの名無しさん:2018/04/17(火) 11:35:04.71 ID:qNbsUSYn.net
もし自作の型が Generic クラスのインスタンスなら、
その型を Num クラスのインスタンスにするのは容易でボイラープレートを書くだけだ、
という話を聞いたのですが、どういうことでしょうか。

546 :デフォルトの名無しさん:2018/04/17(火) 15:15:39.87 ID:xGORc44D.net
Genericは代数的データ型の代数的構造に対して型クラスを使えるようにする仕組みという感じだから
例えば自然数の型クラスがあったらdata Nat = Zero | Succ Natっぽい型をインスタンスにできる(ようにできる)
data List a = Nil | Cons (List a)とかもList a=Natでいけそうだけど詳しいことは知らない
でNumは整数の型クラスだから符号情報を持たせた自然数っぽい型で考えればいいと思う

547 :デフォルトの名無しさん:2018/04/18(水) 21:28:14.85 ID:BYjTZdeC.net
FRPのBehaviorとEventの構成ってなんか恣意的なのかなって印象で手付かずだったけど、
型がそれぞれ関数と直積で、カリーハワード考えるとForAllとExistsですよて説明見たら、
何に効いてくるのかまだよく分からんけど、真面目にやろうかなと思った。

548 :デフォルトの名無しさん:2018/04/20(金) 15:57:50.03 ID:0HOWAbgI.net
Yesod のオライリー本ってまだ翻訳されてないの

549 :デフォルトの名無しさん:2018/04/20(金) 19:31:13.34 ID:wBOVlPyY.net
print "日本語"
で日本語を表示するにはどうしたらいいですか?

550 :デフォルトの名無しさん:2018/04/20(金) 20:11:46.72 ID:kdAO2jaP.net
https://hackage.haskell.org/package/base-4.11.0.0/docs/System-IO.html#g:23

551 :デフォルトの名無しさん:2018/04/20(金) 20:49:36.18 ID:4Eu7Barh.net
できないんですね
わかりました

552 :デフォルトの名無しさん:2018/04/20(金) 21:00:49.10 ID:0HOWAbgI.net
できますよ

553 :デフォルトの名無しさん:2018/04/26(木) 12:38:49.74 ID:X3BRJjDS.net
公開したくない自作データ型を引数に持つ自作関数を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.30 ID:XXRDrUvo.net
>>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.88 ID:5zUTZf4m.net
>>554
アドバイスありがとうございます。

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

検討してみます。

556 :デフォルトの名無しさん:2018/04/28(土) 17:38:12.45 ID:fw0WMpkgm
Haskell初心者です。
もしかしてHaskellってmain以外の場所、具体的に関数内で入力関係の処理を記述する文法という手段自体がない?
自分的にはそれが出来たら、参照透過性が壊れるからかなと理解しております。
例えば縦*横の面積を返す関数fで
f x=
     y<-getLine
     y1=read y::Doouble
     return x*y1
なんてできたら同じxを入力しても毎回違う値が返ってくる可能性がある。
とすると参照透過性が壊れているからHaskell的にNGと理解してますがOKですか?

557 :デフォルトの名無しさん:2018/05/03(木) 01:36:32.06 ID:kRKy+vnx.net
ようやくwin10 wslでghcが遅かった件直った感じかな

558 :デフォルトの名無しさん:2018/05/04(金) 07:55:06.89 ID:losdahgV.net
http://neilmitchell.blogspot.jp/2018/04/dont-fear-monad-t-shirts.html?m=1
外国人のこういうセンス好き

559 :デフォルトの名無しさん:2018/05/04(金) 08:58:01.41 ID:eKrFMwvm.net
日本人の「モナド萌え〜」Tシャツはないの?

560 :デフォルトの名無しさん:2018/05/06(日) 09:54:40.96 ID:KRn6cuFA.net
モナまでは可愛いが、油断してるとドがついて怖い感じ。

561 :デフォルトの名無しさん:2018/05/06(日) 10:12:01.34 ID:KRn6cuFA.net
Reflexやってる人います?Stackと親和的じゃないから結局諦めちゃった。

Threepenny-GUIはシンプルで良いね。Threepennyで作ったのをiOSやAndroidに移植できるんかな。

562 :デフォルトの名無しさん:2018/05/09(水) 03:57:47.41 ID:yAd9yFdW.net
>>558
三拍子揃っててだめだった

563 :デフォルトの名無しさん:2018/05/16(水) 06:39:11.37 ID:KuTIShdq.net
intellijにhaskellいれようとしてたらいくらやってもだめだったの
よーくみたらWindow Defenderがじゃましてた
はらたつー

564 :デフォルトの名無しさん:2018/05/16(水) 14:15:35.67 ID:86oQSZWQ.net
MS「永続性はウイルス」

565 :デフォルトの名無しさん:2018/05/20(日) 16:01:44.58 ID:h2BQfP5S.net
random パッケージの System.Random モジュールの split 関数は、
新しい RandomGen クラスのインスタンスをなぜ2つも生成するのでしょうか。

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

私は何か勘違いをしているのでしょうか。

566 :デフォルトの名無しさん:2018/05/20(日) 17:35:56.32 ID:FfB1JAMU.net
そもそもnextだってgetValとnextGenに分けてもいいけどね
まあ基本的には設計とか効率の問題なんじゃない?
それに戻り値が一つのsplitは引数の方がそのままもう一回splitされないように注意する必要があるし

567 :デフォルトの名無しさん:2018/05/23(水) 19:45:00.92 ID:Au5e7VGg.net
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

P0GWF

568 :デフォルトの名無しさん:2018/05/24(木) 10:55:19.93 ID:cPlRxlDn.net
567

569 :デフォルトの名無しさん:2018/05/25(金) 21:11:33.96 ID:cptzVN/K.net
エスパー来る

ところで、関数型言語のこの世の春は来ますか?

570 :デフォルトの名無しさん:2018/05/26(土) 04:33:44.12 ID:d8ZkW1Ij.net
GHCのインストール先の変え方教えて
ちなWindows
Cドライブに入れたくない

571 :デフォルトの名無しさん:2018/05/26(土) 04:40:40.86 ID:d8ZkW1Ij.net
Stackのコンフィグをイジる?

572 :デフォルトの名無しさん:2018/05/31(木) 00:34:57.11 ID:zA1zBE3e.net
haskellの練習してる初心者なんですが2進数の文字列表現を10進数の整数に変換する処理ってこんな感じで大丈夫でしょうか? https://csacademy.com/code/CsGalG5X/

573 :デフォルトの名無しさん:2018/05/31(木) 01:09:51.63 ID:CXLwfWM5.net
単に数値にしてるだけであって、10進数に変換して表示してるのはprintさんでしょ?

574 :デフォルトの名無しさん:2018/05/31(木) 08:07:17.08 ID:Dl0sFDMW.net
Showが忖度したのであってInteger大臣が文字列化を指示したわけではない

575 :デフォルトの名無しさん:2018/06/01(金) 00:33:16.96 ID:vzHrz6jW.net
10進数への変換も自前で実装しろって話の流れ?

576 :デフォルトの名無しさん:2018/06/01(金) 01:50:05.31 ID:0E17r036.net
>>572が何を目指すのかによる。

577 :デフォルトの名無しさん:2018/06/05(火) 20:09:41.67 ID:pRSj0ubW.net
どうでもいいけど、それぞれのGHC言語拡張の名前で単数形と複数形の違いがいまいち分からん。
うろ覚えで複数形で書いてコンパイルエラーになったり。

命名規則とかあるんかな?

578 :デフォルトの名無しさん:2018/06/06(水) 07:44:03.32 ID:azXcBu8b.net
使った中じゃ英語で説明するのに複数形が使われるであろうものなら
大体複数形だったと思うけど
カタカナ語のノリでやってるから割と間違う

579 :デフォルトの名無しさん:2018/06/13(水) 21:49:00.45 ID:i4vh63zU.net
すごいH本に煽られるとまじでムカつくんだけど

580 :デフォルトの名無しさん:2018/06/17(日) 22:53:19.15 ID:kUxbeqDh.net
すごいHだから勃起botをリツイートしてるのか

581 :デフォルトの名無しさん:2018/06/18(月) 09:11:06.80 ID:QNagypIW.net
おい!あの岡部健(毛の壁)がgithubで活動を再開してるぞ!

582 :デフォルトの名無しさん:2018/06/18(月) 18:39:20.54 ID:MmynirXE.net
IT芸人が新作コンテンツ提供開始か

583 : :2018/06/18(月) 20:51:53.97 ID:OiAJbwiy.net
>>581
本当ですか!ぜひお会いしたい!

584 :デフォルトの名無しさん:2018/06/27(水) 12:31:39.52 ID:+XG/5Wm3.net
今時コンパイルとか流行らないよ
サクッと書けても実行までが面倒だと普及しない
もっと標準ライブラリをヘビィにしてPython化するしか生き残りの道はない

585 :デフォルトの名無しさん:2018/06/27(水) 14:44:28.75 ID:rnjnLILH.net
同意だ。Turtle使ってシェバンにstackコマンドライン書いて、
Haskellでシェルスクリプトするというのがあったが正気の沙汰とは思えない。

586 :デフォルトの名無しさん:2018/06/27(水) 19:48:00.92 ID:luhHLeJ1.net
むしろ今はコンパイル全盛期でしょ
rubyとか下火だし

587 :デフォルトの名無しさん:2018/06/27(水) 22:56:56.37 ID:kWgGKFVN.net
どれだけ簡潔に記述出来ても
短いプログラムでは実行するまでの手間の割合が大きくなるから
pythonでいいやってなる

588 :デフォルトの名無しさん:2018/06/28(木) 05:41:11.51 ID:F07eHa3U.net
対話環境使わんの?短いプログラムてのがどんな状況か知らんからなんとも。

589 :デフォルトの名無しさん:2018/06/28(木) 07:28:52.90 ID:BPlVOF4a.net
Haskellで簡潔に書けるという特殊能力を持っておきながら
破壊的で動的型付けな言語を選ばなければいけないという悲劇

590 :デフォルトの名無しさん:2018/06/28(木) 15:27:57.03 ID:5C2saF7L.net
なんで宗教みたいに二者択一になるの
要所要所で使い分ければいいだけでしょ

591 :デフォルトの名無しさん:2018/06/28(木) 16:47:06.64 ID:aKd05JxM.net
たかだか数秒のことで簡潔さを失いたいとは思わないね

592 :デフォルトの名無しさん:2018/06/28(木) 16:57:33.76 ID:rY43/kt0.net
バンパターンとかseqとか使いまくるからあんま簡潔に書けないわ

593 :デフォルトの名無しさん:2018/06/28(木) 17:36:24.62 ID:kdV1Odt0.net
簡単なプログラムだと
このifでこれとこれ書き換えてさらにネストしたifでこれとこれを書き換えて
とかやっちゃうな
haskellでもStateモナドとか使えばいいんだろうけど

594 :デフォルトの名無しさん:2018/06/28(木) 18:02:30.70 ID:rjCVmVg9.net
文字列を直接操作したければ動的型でいい
直接操作することなくShowとReadで処理できるならHaskellの型は無駄ではない

595 :デフォルトの名無しさん:2018/06/28(木) 20:20:52.20 ID:8bPXL4i4.net
より真理に近い言語以外使いたくないのだ

596 :デフォルトの名無しさん:2018/06/28(木) 20:47:06.63 ID:5C2saF7L.net
込み入った評価戦略で脳ミソ使わされるのが真理とも思えんがw

597 :デフォルトの名無しさん:2018/06/28(木) 20:59:45.19 ID:rY43/kt0.net
量子コンピュータが実用化されればへーきへーき

598 :デフォルトの名無しさん:2018/06/28(木) 22:01:03.00 ID:GLp7lVXW.net
文字列入力を要求してその文字列を含むファイルを検索して見つかったらエディタで開く、
的な、コマンドラインからさっと使いたいので実行までが重いと困るけど、
cabalプロジェクトにする程のもんでもない規模のやつ

599 :デフォルトの名無しさん:2018/06/28(木) 22:04:23.65 ID:GLp7lVXW.net
if ってあんま使ったことない。関数のガードとcase、あとData.Bool.bool

600 :デフォルトの名無しさん:2018/06/29(金) 18:53:31.79 .net
Yesodって失敗したの?

601 :デフォルトの名無しさん:2018/07/02(月) 22:40:55.64 ID:Q8zb4uVa.net
Haskellは"関数型だから"コードが短く生産性が高いと聞いたのに
関数型ではないPythonの方がコードが短く書けると知った時の絶望感

602 :デフォルトの名無しさん:2018/07/02(月) 22:42:40.97 ID:zz3F/ohp.net
そうなのか?

603 :デフォルトの名無しさん:2018/07/03(火) 12:03:15.48 ID:j/SH2c2P.net
関数型ではないHaskellがあるってことだろ
男の娘みたいなやつが

604 :デフォルトの名無しさん:2018/07/03(火) 12:11:44.26 ID:jJAl/nPq.net
関数型こそ邪悪なシンタックスに頼らない無敵の流派なのだ
ただし両方使う方が強い

605 :デフォルトの名無しさん:2018/07/03(火) 12:22:05.97 ID:vylnwloM.net
最強はF#で決まりがこのスレの結論です

606 :デフォルトの名無しさん:2018/07/03(火) 15:28:26.92 ID:RDWAs26/0.net
バグバグしてていいならpythonの方が手っ取り早いでしょ

607 :デフォルトの名無しさん:2018/07/03(火) 19:37:38.72 ID:h6TZWOAm.net
そのバグが出ない haskell で、まともなグラフ描けるライブラリ作ってくれよ

608 :デフォルトの名無しさん:2018/07/03(火) 20:25:29.91 ID:k4izv0NM.net
そういう考え方の人はpythonの方がいいでしょ
住み分け住み分け

609 :デフォルトの名無しさん:2018/07/03(火) 20:42:26.69 ID:kQlTmain.net
>>607
hackage にアップされているグラフ描画ライブラリの
まともではない点とその理由を列挙していただけないでしょうか。

来月ちょっと暇ができるので、ここで議論が深まれば、
列挙されたものの幾つかを改善してみようかと思います。

610 :デフォルトの名無しさん:2018/07/03(火) 22:20:48.11 ID:UwUpR5rd.net
>>609
Haskell は調べかかってあきらめたからよく知らないんだが、Python ユーザの視点で書かせてくれ。

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

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

あとオレが調べた時は単純にHaskell のグラフライブラリは見た目が古臭かった。gnuplot 並み。
最近だとPythonでもRでも、カッコいい色のセットとかを選べるし、複数のグラフを簡単にレイアウトできる。
頑張ればカッコよく描けるのかもしれないけど、そんなところに頑張りたくないんだ。

611 :デフォルトの名無しさん:2018/07/04(水) 03:12:38.67 ID:kJrFfDeb0.net
じゃあグラフ描くならPythonってことでいいんじゃないですかね

612 :デフォルトの名無しさん:2018/07/04(水) 03:48:39.08 ID:y2B7jfXw.net
すいません。ハマってしまってます。助けてください。
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

と駄目みたいです。
何がだめなのかさっぱりわかりません。
どなたか解決策わかりますか?

613 :デフォルトの名無しさん:2018/07/04(水) 06:46:15.75 ID:We7MgVDS.net
>>610
matplotlibやpandasあたりは、
そのためだけに、Python使うくらいのライブラリだから、
他の言語に使いたいライブラリがあれば、
その言語を使うで使い分けで良いんじゃない。
Excelの読み書きもなんかもPython使ってるよ。

614 :デフォルトの名無しさん:2018/07/04(水) 07:58:03.61 ID:RQ3++Y83.net
HaskellのシンタックスのPythonが欲しい

615 :デフォルトの名無しさん:2018/07/04(水) 09:21:13.05 ID:NlExtjkH.net
>>612
HaskellのComplexで四則演算などをしようとすると
各要素はRealFloatクラスのインスタンス (いわゆる浮動小数点数)である必要がある
Ratio a はRealFloatのインスタンスになれないので計算できない
こうなってる理由はざっくり言えばHaskellのNumが悪い
(参考: https://blog.miz-ar.info/2016/06/haskell-num-class/#abs_signum )

616 :デフォルトの名無しさん:2018/07/04(水) 11:08:34.25 ID:y2B7jfXw.net
>>615
ありがとうございます。
Ratio a 割り算できるのに駄目なんですね。
別法考えます。

617 :デフォルトの名無しさん:2018/07/04(水) 11:21:15.35 ID:rsOJUgV3.net
>>610
例えば QuickPlot (https://github.com/sheegl/QuickPlot)
そこそこモダンな描画を行うライブラリでしたが、
README.md にあるとおり、もうメンテナンスは行われていません。
ビジュアライゼーションサーバーのクライアントを作る方がより効率的だから、だそうです。

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

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

あと、gnuplot を卑下してるようですが、そんなにダメですか?
私には視認性の良いグラフに見えますけど。
Wikipedia のグラフにも使われていますし。

618 :デフォルトの名無しさん:2018/07/04(水) 14:52:23.98 ID:okkM4kUQ.net
gnuplot も悪いとまでは言わないが、昔の解像度が低く色数もあまりなかった時代に最適化されてる気がするんだよ
Python のグラフと、微妙に用途が違うのかもしれないが

Python のグラフ
ttps://seaborn.pydata.org/examples/index.html

619 :デフォルトの名無しさん:2018/07/04(水) 16:23:51.06 ID:rsOJUgV3.net
>>618
すいません、違いがよくまかりません。

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

私には低解像度&少色数時代の環境に最適化されているようにはどうしても見えないです。

620 :デフォルトの名無しさん:2018/07/04(水) 19:14:51.99 ID:J/c/gMh10.net
会社のプレゼンに使うならPythonの例の方がオシャレに見える
しかしオシャレなグラフというのは見栄え以外の面では役に立たない

621 :デフォルトの名無しさん:2018/07/04(水) 21:47:59.97 ID:gFgZc5FG.net
MY6

622 :デフォルトの名無しさん:2018/07/05(木) 02:06:23.28 ID:4KPVS4+Q.net
その無駄に思えるオシャレが大事なんだぜ

623 :デフォルトの名無しさん:2018/07/05(木) 06:27:20.02 ID:fgqUaerO.net
Pythonの例として上げられてるのは、seabornという
1. Rからデザインと
2. 人気のあるデータ表示方法
をパクって、同じことをmatplotlib.pyplotを裏で使ってお手軽にできるようにしたパッケージであって、
素のmatplotlib.pyplotのグラフはgnuplotのデフォルトと変わりのない見た目ですよ

gnuplotだって、山ほど表示用オプションがあって綺麗に表示できます

624 :デフォルトの名無しさん:2018/07/05(木) 09:04:27.74 ID:HeNpkv8u.net
>>623
gnuplot でお手軽に綺麗に表示できるようになってるの?

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

教えてもらった labels- explorer は面白そうなんで見てみるよ

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

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

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

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

3. 上記1. 2. を満たせば、グラフの生成自体は gnuplot に任せても良い。

626 :デフォルトの名無しさん:2018/07/05(木) 18:25:11.62 ID:rB4OVQ4f.net
一見丁寧に見えてなかなかに辛辣でワロた。

627 :デフォルトの名無しさん:2018/07/05(木) 18:32:51.78 ID:Ia+ptacm.net
そんなところ頑張りたくないからデフォルトで一般受けする図を出せる奴が欲しいってだけの議論でなんでこんな白熱するんだ

628 :デフォルトの名無しさん:2018/07/05(木) 18:54:20.69 ID:rB4OVQ4f.net
>>627
Pythonユーザーの視点、て一言がたぶん余計だったと見受けられる。

Haskellな人、でググると逆の気持ちが分かるかと。

629 :デフォルトの名無しさん:2018/07/05(木) 20:16:09.24 ID:F0I+x23p1
下の関数で、
result :: [(a, b)]をコメントアウトすると問題ないのですが、
どう理解したらいいでしょうか?
エラー文のa1, b1ってどこから出てきたんですかね?

tes :: [a] -> [b] -> [(a, b)]
tes as bs = result
  where
    result :: [(a, b)]
    result = zip as bs



    • Couldn't match type ‘a’ with ‘a1’
      ‘a’ is a rigid type variable bound by
        the type signature for:
          tes :: forall a b. [a] -> [b] -> [(a, b)]
        at .....
      ‘a1’ is a rigid type variable bound by
        the type signature for:
          result :: forall a1 b1. [(a1, b1)]
        at ....
      Expected type: [(a1, b1)]
        Actual type: [(a, b)]

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

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

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

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

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

でも、私の指摘の他に python のグラフならではの特徴があり、
それを求められているのであれば、実装が難しくなり、
正直腰が引けます。
そのための確認です。

631 :デフォルトの名無しさん:2018/07/05(木) 21:59:46.30 ID:LtuS5J6M.net
普通にいける範囲なら実装してくれるってこと……?
神かよ

632 :デフォルトの名無しさん:2018/07/05(木) 22:39:32.46 ID:JLdZJLqI.net
Pythonならでは、って訳じゃないが(むしろ Rのパクリだと思うが)
facet とかいうグラフを二次元の表に並べたオシャレなグラフは欲しい
軸はグラフ毎に共通にできたりバラバラにできたりする
seaborn の facetgrid ってクラス見てくれ、map でグラフ書いたりしてて、ちょっと関数型言語の影響がありそうだから

あとは逆にHaskell ならではの良さが出るかどうかだな

633 :デフォルトの名無しさん:2018/07/05(木) 23:17:35.48 ID:mFkifadT.net
> Haskellならではの良さ
フーム

634 :デフォルトの名無しさん:2018/07/05(木) 23:22:55.84 ID:aP+h4Ji7.net
>>632
複数のグラフを並べるのは、gnuplot では、このサンプルの一番下のものですね。
http://gnuplot.sourceforge.net/demo_5.0/layout.html

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

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

あと何度も言いますが、オシャレなグラフになるかどうかは個人のセンスですので、
そんなものはライブラリに期待しないでください。
ある程度のプリセットは用意しようと思いますが、あくまで私のセンスです。
普通は利用者がパラメーターを調整して自分でオシャレに仕上げるものです。

635 :デフォルトの名無しさん:2018/07/06(金) 00:29:48.55 ID:qcgYo1MM.net
それはいけない。
現にSeaborneはおしゃれに仕上げて来ているので、Pythonならライブラリに期待できるのにHaskellでは期待出来ないということになってしまう

636 :デフォルトの名無しさん:2018/07/06(金) 01:50:57.76 ID:nHf3/Uiq.net
>>635
プログラミング言語を用いてグラフを作る目的は、
データの取得、加工、整形までをサクッとプログラムしたのだから、
そのデータの全体像を捉えるための可視化も「ついでに」してしまおうというもの。

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

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

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

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

なので、あくまでオシャレなグラフを作るライブラリを求めているのでしたら、
私のモチベーションは大きく下がるので、
この件から降ります。

637 :デフォルトの名無しさん:2018/07/06(金) 02:04:10.34 ID:qcgYo1MM.net
>>636
そういう考えなら降りた方が良いと思うよ

638 :デフォルトの名無しさん:2018/07/06(金) 05:21:13.62 .net
なんでオシャレにしないといけないんですか(正論)

639 :デフォルトの名無しさん:2018/07/06(金) 06:38:28.09 ID:hZ+CPQ2X.net
自己肯定感かな
論理に自信があるなら論理だけでいいがそうでなければオシャレが必要なような気がする

640 :デフォルトの名無しさん:2018/07/06(金) 06:41:34.00 ID:2hmUlp+S.net
何がオシャレなのかを定義して
正確に人に伝えるところからじゃないの?

641 :デフォルトの名無しさん:2018/07/06(金) 07:12:51.82 ID:hZ+CPQ2X.net
もし定義できないならできないと伝えるのが正しい言葉なんです

642 :デフォルトの名無しさん:2018/07/06(金) 07:46:50.10 ID:vkH0MZEq.net
ユーザーは最初から見た目を重視してんのに、ここにきていきなりオシャレは必要ないって突っ返すのは、
さすがにPythonがどうとかHaskellがどう以前にコミュニケーション不全

643 :デフォルトの名無しさん:2018/07/06(金) 08:37:44.78 ID:ODtONBJi.net
万能なプリセットなんておれは期待してないから、
適当なのを真似るだけで全然問題ないよ
ただ別に金出してるわけでもないから、おれは好き勝手書いてるけど別に従う必要はないよ

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

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

画面に収まるようにするには、削ってもいい情報を削り、例えばfacetみたいな方法でまとめるしかない。
かといって圧縮しすぎても分からなくなるし難しいけどね。

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

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

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

gnuplot でもできることは理解したけど、
オシャレではないので却下という事ですか?

645 :デフォルトの名無しさん:2018/07/06(金) 11:23:26.70 .net
長い棒グラフを端折る為に、下端を0以外の数値にしちゃうとか、マナー違反しない限りもう好きにやってくれ

646 :デフォルトの名無しさん:2018/07/06(金) 11:46:42.42 ID:aeaUac9w.net
オシャレって結局UXだからね
手軽に良いUXが得られる方を使うのは自然っちゃ自然なわけで

647 :デフォルトの名無しさん:2018/07/06(金) 14:15:19.37 ID:hZ+CPQ2X.net
UXを定義できないなら予測もできない
予測できると思ってるならやっぱり定義するべき

648 :デフォルトの名無しさん:2018/07/06(金) 18:44:45.57 ID:aeaUac9w.net
UX自体の定義は単純だよね
プロダクトによってユーザーが得る経験
良し悪しになると一意には定まらないけど良い悪いのアンケでも取って統計的有意差を得られれば良い悪いとしていいと思う

もし客観主義として定義可能なものしか定義と認めないと言うならお手上げだ
良いUXが得られるとされるプロセスには既にアンケなどによるユーザ要求の明確化が含まれてしまうからね

649 :デフォルトの名無しさん:2018/07/07(土) 09:26:18.48 ID:IVdrrdB1.net
アンケ取って結果を発表するところまで全部がUXになるからお手上げだな
放○線を測定して数値を報道するみたいなUXだ

650 :デフォルトの名無しさん:2018/07/07(土) 11:29:34.03 ID:o7Nl1O6h.net
出来ない出来ないと言い訳ばかりして実際出来ているPythonから目をそらす

651 :デフォルトの名無しさん:2018/07/07(土) 11:58:08.73 ID:IVdrrdB1.net
プロシュー○「出来る…そんな言葉は使う必要がねーんだ。」

652 :デフォルトの名無しさん:2018/07/07(土) 12:00:36.05 .net
たかがグラフ一つでいつまでもスレを汚さないで
もっと本格的な話をして

653 :デフォルトの名無しさん:2018/07/07(土) 21:46:46.78 ID:amcAQv9O.net
質問

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

今のsortの実装は確かマージソートだったはずだから、
極端な話、条件に合う要素がただ一つだけ先頭にあれば、
ソート処理はすぐに終わると思っていい?

654 :デフォルトの名無しさん:2018/07/07(土) 23:14:16.03 ID:CxD5piUN.net
>>653
そういう意図なら
sort $ takeWhile p xs
じゃないかな
最初に書いてある式だと、takeWhile p が引数のリストを評価しようとしたときに
sort xsの第一要素を見る必要があるのでxsをソートし終わらないと評価が進まないはず

655 :デフォルトの名無しさん:2018/07/08(日) 00:09:13.07 ID:Xnl3te8c.net
マージソートでマージが遅延されるならhead $ sort xsはO(n)だと思う
いい感じの説明用コードが思いつかないけど
あとたぶん例のクイックソートも

656 :デフォルトの名無しさん:2018/07/08(日) 00:15:59.84 ID:Xnl3te8c.net
あークイックソートは先頭だけでも最悪O(n^2)になったりするか

657 :デフォルトの名無しさん:2018/07/08(日) 01:32:29.33 ID:fmVgo5Ue.net
>>654
オレ >>653

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

だから sort と takeWhile を入れ替えたら意味ない

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

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

お休み、お前ら

659 :デフォルトの名無しさん:2018/07/08(日) 09:12:56.04 ID:fmVgo5Ue.net
実験したら、やっぱり評価に必要な部分しかソートされなかったよ
実験は 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

質問したけど、ひとりで納得してしまった、すまん

660 :デフォルトの名無しさん:2018/07/08(日) 09:49:58.54 ID:ZNji3Zip.net
>>659
>ベスト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

661 :デフォルトの名無しさん:2018/07/08(日) 10:45:22.88 ID:JJmFxw3L.net
どんな言語だろうが全部ソートすれば O(n*log(n)) で最小値や最大値を探すのは O(n)

この n と n*log(n) の差を無視できないなら
そもそも n と 100*n の差を無視するのもダメじゃないかと思う

662 :デフォルトの名無しさん:2018/07/08(日) 11:20:47.41 ID:fmVgo5Ue.net
>>660
いや、そうじゃなくてさ

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

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

そこがすげーって感動してるんだよ

663 :デフォルトの名無しさん:2018/07/08(日) 11:30:44.71 ID:Xnl3te8c.net
まあソートなんて如何にもキャッシュ次第なアルゴリズムで
連結リストと遅延評価のO(N)が配列と正格評価のO(NlogN)に
現実的なNの範囲で勝てるのかものかどうか・・・

664 :デフォルトの名無しさん:2018/07/08(日) 13:00:05.06 ID:MJ8iSrG7.net
まるで永久機関の話を見ているようだ

665 :デフォルトの名無しさん:2018/07/08(日) 22:57:14.98 ID:wt6yCeB5.net
具体例や比喩で抽象度を下げるのは良い
だが「永久機関っぽいもの」の集合を作ったらむしろ抽象度が上がり収拾がつかなくなる

666 :デフォルトの名無しさん:2018/07/09(月) 10:04:31.05 ID:pOD9hGUD.net
arrayパッケージのData.Array.(!)はO(1)ですか。

667 :デフォルトの名無しさん:2018/07/11(水) 00:08:42.37 ID:l1CMhfek.net
Haskellの採用とユーザ満足度が向上
https://www.infoq.com/jp/news/2018/07/haskell-user-survey-2018

668 :デフォルトの名無しさん:2018/07/13(金) 00:35:06.69 ID:vrIUPTb8.net
発展編! Haskellで「型」のポテンシャルを最大限に引き出すには?【第二言語としてのHaskell】
https://employment.en-japan.com/engineerhub/entry/2017/10/03/110000

669 :デフォルトの名無しさん:2018/07/14(土) 09:44:23.46 ID:sMbeASmt.net
yampaムズ過ぎ

初心者用のシンプルで教育的なチュートリアルって無いの?
英語でもいいから教えて

670 :デフォルトの名無しさん:2018/07/15(日) 00:11:52.51 ID:89Btz4it.net
>>677
Yampaエアプだが、このサイトが良さそうだ
http://bitterharvest.hatenablog.com/archive/category/Haskellプログラミング講座(上級編:ゲーム)

671 :デフォルトの名無しさん:2018/07/15(日) 05:50:15.76 ID:uHtx5/Ti.net
>>670
申し訳ない

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

コードを書きまくって慣れろ、って感じ

672 :デフォルトの名無しさん:2018/07/15(日) 08:13:24.43 ID:89Btz4it.net
>>671
フーム
ビヘイビアは Time → a でイベントは [ (Time, a) ]
シグナル関数は (Time → a) → (Time → b)
のようなことが 「FRPの話 - maoeのブログ」で少しだけ説明されているね。

もう少し長い解説をElm開発者の人が論文に書いてた。
http://elm-lang.cn/assets/papers/concurrent-frp.pdf

673 :デフォルトの名無しさん:2018/07/15(日) 08:23:05.35 ID:89Btz4it.net
>>667 ほらね、Haskell普及のためにはツールの拡充が必要なんだよ。
https://github.com/alanz/vscode-hie-server/pull/83
これこれこういうのを待ってた。emacs対応はよ

674 :デフォルトの名無しさん:2018/07/15(日) 09:30:20.96 ID:uHtx5/Ti.net
>>672
ありがとう
両方読んでみる

675 :デフォルトの名無しさん:2018/07/27(金) 11:27:32.40 ID:qBTTu3Zk.net
importのhidingとかqualifiedとか適当にやってるせいで、いつも収拾がつかなくなってる。

ブラックリストかホワイトリストか、asで名前付けるのはどんな時か。みんなどうしてるの?

676 :デフォルトの名無しさん:2018/07/27(金) 21:52:57.03 ID:lmpcLfYu.net
>>675
私も知りたいな。

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

そして、asでつける名前にいつも悩む。

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

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

だから値の明示的インポートはやめて、hidingだけに統一しようかな、と考えてる。
値がバッティングして、かつ両方使いたいならそのモジュールは qualified する。

678 :デフォルトの名無しさん:2018/07/29(日) 20:25:02.63 ID:tC3jGbCj.net
>>676
基本大文字を拾って as している。
import qualified Data.Map as M
import qualified Data.Set as S
だが
import qualified Text.Regex.TDFA as TDFA
つらい

679 :デフォルトの名無しさん:2018/07/31(火) 21:58:40.13 ID:6DhCQI2V.net
https://github.com/trekhleb/javascript-algorithms/issues/119

岡部健、更新。

680 :デフォルトの名無しさん:2018/08/11(土) 12:54:39.21 ID:dGCQYNDS.net
get programming with haskell 読み終わった。

681 :デフォルトの名無しさん:2018/08/12(日) 03:22:15.33 ID:fh95vopi.net
>>680
感想は?

682 :デフォルトの名無しさん:2018/08/12(日) 09:41:11.96 ID:mCQrOvpG.net
>>680
凄いハスケルより初心者向きで実用的でわかりやすい。

683 :デフォルトの名無しさん:2018/08/12(日) 11:23:29.51 ID:1lJIW3H3.net
>>682
実用的というのは?
何かアプリケーションを作るの?

684 :デフォルトの名無しさん:2018/08/12(日) 11:30:59.98 ID:mCQrOvpG.net
>>683
アプリケーションは作らないけれどコマンドラインのプログラムは作る。

685 :デフォルトの名無しさん:2018/08/12(日) 17:25:24.07 ID:1lJIW3H3.net
もしかしてFRPとマルチスレッドって相性悪い?

686 :デフォルトの名無しさん:2018/08/12(日) 18:12:55.83 ID:HMPSYWub.net
新分子設計は並列処理を酷使するだろうが
強化プラスチックが特別どうということはないだろう

687 :デフォルトの名無しさん:2018/08/12(日) 18:50:22.57 ID:RPd+D2gX.net
>>686
FRPの有限要素解析?

688 :デフォルトの名無しさん:2018/08/12(日) 19:11:53.89 ID:OVUWpXpl.net
>>26

689 :デフォルトの名無しさん:2018/08/13(月) 06:20:04.15 ID:HYnqBmQs.net
いいねえ。気軽に使えるからコマンドラインは好き。
自分で使うツールを作るのが一番モチベ上がるね

690 :デフォルトの名無しさん:2018/08/13(月) 14:03:54.60 ID:DTF7R3qv.net
Get Programming with Haskellはタイトルのとおり初心者向けの本だよ
600ページの本で400ページ超えたところでstack導入して、
あとは、簡単なコマンドラインツール、http、JSON、dbおさわりくらい
それまでは、ghci使ってhaskellの学習

691 :デフォルトの名無しさん:2018/08/26(日) 22:17:17.61 ID:hKYk5Tea.net
Haskell開発ワークフロー。お前らはどれ?
1. stackの--file-watch
2. ghciの:r
3. ghcid
4. エディタのフック
https://www.fpcomplete.com/blog/2018/08/haskell-development-workflows-4-ways

692 :デフォルトの名無しさん:2018/08/27(月) 22:15:37.17 ID:8S3lymML.net
今やすいぞ 多分半額程度

ソフトウェアシステムアーキテクチャ構築の原理 第2版
https://www.amazon.co.jp/ソフトウェアシステムアーキテクチャ構築の原理-第2版-ニック-ロザンスキ-ebook/dp/B00ZF44J0I/ref=tmm_kin_title_0?_encoding=UTF8&qid=1535375513&sr=1-1

693 :デフォルトの名無しさん:2018/08/29(水) 13:20:47.63 ID:nTrDfIjn.net
>>691
俺は2

694 :デフォルトの名無しさん:2018/09/04(火) 09:34:44.70 ID:0nZVvdsT.net
カリー化された関数の表記がよく分かりません。

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

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

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

add = \x -> (\y -> x + y)

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

これでも問題ないと思います。

696 :デフォルトの名無しさん:2018/09/04(火) 10:34:46.73 ID:ntR3woJY.net
Int -> (Int -> Int) も
Int -> Int -> Int も同じやろ

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

更に引数3つとるaddなら
add = \x -> (\y -> (\z -> x + y + z))
と同じ意味だし、haskellはデフォでそういう仕組になってるってことやろ

697 :デフォルトの名無しさん:2018/09/04(火) 10:40:17.26 ID:0nZVvdsT.net
>>696

ありがとうございます。

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

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

add' x y = x + y

↑これをみて、型が add' :: Int -> (Int -> Int) だとはとても分かりません。

698 :デフォルトの名無しさん:2018/09/04(火) 10:48:31.75 ID:W1MTXd47.net
じゃあどんな型だと思うんだい?

699 :デフォルトの名無しさん:2018/09/04(火) 10:48:48.98 ID:ntR3woJY.net
逆にそれ見たらどういう型だと思った?
Int -> Int -> Int
って思ったんじゃない?

なんの本読んでるかしらんけど
例えば add x y z なら Int -> Int -> Int -> Int だけど
実際には
Int -> (Int -> (Int -> Int))
こうなってるってことを言いたいんやろ

700 :デフォルトの名無しさん:2018/09/04(火) 10:50:47.26 ID:0nZVvdsT.net
>>698

add' :: Int Int -> Int

という型に見えます。

701 :デフォルトの名無しさん:2018/09/04(火) 10:52:13.57 ID:0nZVvdsT.net
1 2

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

1 + 2

を対応させる関数に見えます。

702 :デフォルトの名無しさん:2018/09/04(火) 10:54:55.24 ID:0nZVvdsT.net
関数を返す関数なんですから、

=

の右には数ではなく関数を書くべきです。

703 :デフォルトの名無しさん:2018/09/04(火) 10:57:59.07 ID:0nZVvdsT.net
f x = x + 2

などの例を見て、

f ● = ■

という表記は、

f(●) = ■

という意味かと思います。

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

haskellはそういう部分適用できる関数を書きやすいように
add x y = x + y を add = \x -> (\y -> x + y)に自動で変換してくれるってだけ
糖衣構文ってやつ
嫌なら全部ラムダ式で書けばいいよ

705 :デフォルトの名無しさん:2018/09/04(火) 11:41:42.58 ID:W1MTXd47.net
>>700
じゃああなたが今勉強してるカリー化って何なんですかね?

706 :デフォルトの名無しさん:2018/09/04(火) 12:05:07.87 ID:/45N32wx.net
**argv :: char
*argv :: char*
argv :: char**

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

C言語を学習した人はHaskellも分かる
これが知能だ

707 :デフォルトの名無しさん:2018/09/04(火) 12:52:41.14 ID:JkSql3w1.net
Haxe では関数の型は、
function sum (a:Int, b:Int) : Int

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

最後は戻り値

708 :デフォルトの名無しさん:2018/09/04(火) 12:54:41.46 ID:tHCjwI0T.net
>>703
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
というおそらく>>700 でイメージしているであろうものに近い関数が得られる
Haskellのデフォルトの振る舞いはこちらではないという話

709 :デフォルトの名無しさん:2018/09/04(火) 14:03:08.32 ID:TMcC/EnP.net
通りすがりだけど勉強になった
haskell面白そうだな

710 :デフォルトの名無しさん:2018/09/04(火) 20:06:44.00 ID:f+p4hPZb.net
Haskellちょっといじってると楽しいけどこれで飯食うのは自分には絶対無理という確信がある

711 :デフォルトの名無しさん:2018/09/04(火) 20:32:29.35 ID:kOsSso2/.net
Haskellで食っていきたい

712 :デフォルトの名無しさん:2018/09/04(火) 21:00:34.43 ID:jmLwKshs.net
Haskell丼食いたい

713 :デフォルトの名無しさん:2018/09/05(水) 02:13:16.34 ID:sfHxtAx4.net
市場を作れ

714 :デフォルトの名無しさん:2018/09/05(水) 02:29:20.15 ID:XBVLJBKG.net
まずはHaskellの独壇場となるニッチ市場を開拓しないとな
どこかある?

715 :デフォルトの名無しさん:2018/09/05(水) 02:54:04.71 ID:MYQmiXId.net
写像をドメイン、コドメインのみ与えて定義するのが簡単にできればちょっと優位にたてる分野はある

716 :デフォルトの名無しさん:2018/09/05(水) 17:02:07.24 ID:7oDYcpPT.net
>>715
もう少し詳しく教えて

717 :デフォルトの名無しさん:2018/09/05(水) 17:04:52.63 ID:7oDYcpPT.net
いまのHaskellには何が足らないのか。どんな分野で強みが活きるのか

718 :デフォルトの名無しさん:2018/09/05(水) 20:52:06.57 ID:4jTvsEmq.net
haskellでddd, cqrs, esのやり方を教えろください

719 :デフォルトの名無しさん:2018/09/07(金) 12:23:22.72 ID:bXCAi+24.net
DDDが活きてくる(と見込める)ほどの規模の案件をhaskellで組むプロジェクトって凄いな

本格的にhaskellを導入してるんだね

720 :デフォルトの名無しさん:2018/09/07(金) 18:05:22.36 ID:jiol9czZ.net
>>718
cqrs haskell でググるとすぐに
https://github.com/BardurArantsson/cqrs
がヒットするが、これではダメなん?

721 :デフォルトの名無しさん:2018/09/07(金) 19:04:41.60 ID:2UbG8YkS.net
>>720
DDD は Extensible Effect と Tagless final がよく合う

722 :デフォルトの名無しさん:2018/09/07(金) 23:54:56.71 ID:2UbG8YkS.net
Haskellに欠けているのは中級者向けの書籍なのかも

723 :デフォルトの名無しさん:2018/09/08(土) 00:07:42.03 ID:8HsWZyyw.net
コンセプトは無茶苦茶面白いのに、肝心の実装が学級的で好き放題に流動的で恐ろしく無責任だからでは

724 :デフォルトの名無しさん:2018/09/08(土) 13:16:38.32 ID:kGQ5zdyq.net
>>723
そうなのか。具体的にはどのあたりが?

725 :デフォルトの名無しさん:2018/09/10(月) 20:55:39.03 ID:Tuk3Smzo.net
Functional Design and Architecture
https://www.reddit.com/r/haskell/comments/6ck72h/functional_design_and_architecture/
素晴らしい、応援したい

726 :デフォルトの名無しさん:2018/09/11(火) 06:18:11.27 ID:xFzcqeSI.net
発売されたら買おうかな

727 :デフォルトの名無しさん:2018/09/11(火) 20:55:06.43 ID:GxY7LXz/.net
ひゃっほおおおう! ビルド通ったぜ
stackageの可能な限り全部の総計2352パッケージを含むプロジェクトのビルドがやっと通った。
もはや ghci をいったん落として stack.yaml と cabal ファイルにパッケージを追記し... などという面倒をしなくても
ただ import するだけでそれが利用可能になる。

728 :デフォルトの名無しさん:2018/09/15(土) 18:42:49.12 ID:UVc1X0kV.net
spacemacsのinteroでデバッグできてる人います?

replを立ち上げた後、デバッグしようとする(spc m d d)と、
No Haskell session associated with this debug buffer.
てエラーが出て、先に進まないです。
上記はhaskell-debug.elの中に出てくるエラー文で、
上で立ち上げたrepl(stack ghci)がsessionとして認識されてないのが原因?な気がしますが、力及ばずって感じです。

729 :デフォルトの名無しさん:2018/09/16(日) 08:20:46.91 ID:qJ8HI8bW.net
>>714
金融で使ってる。
あと文書解析。

730 :デフォルトの名無しさん:2018/09/16(日) 22:36:53.37 ID:/Gv7qrCh.net
すみません言語の話題から少し外れますが、

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

何か環境を弄ったり外部設定ファイルを書き換えたりして
外国のユーザー画面みたいな滑らか文字表示にする方法を
もしご存知でしたら教えて下さい。

731 :デフォルトの名無しさん:2018/09/17(月) 17:50:28.07 ID:tAsBi2aZ.net
ポールフダックの音楽/Haskellの本が延期しまくりでつらみ
慰めに手を出してみたreact+reduxが割と面白くてjavascriptおじさんになりそう

732 :デフォルトの名無しさん:2018/09/18(火) 15:50:49.67 ID:zscrEVSG.net
ハスケルミュージックスクールってやつ
なら無料で読めるドラフトバージョンのやつよんだけど糞つまらんよ
ほとんどがライブラリーの使い方の説明しか書いてない

733 :デフォルトの名無しさん:2018/09/18(火) 23:03:29.52 ID:5HE01N22.net
その本です
定価で買うような本じゃなさそうですね…

734 :デフォルトの名無しさん:2018/09/18(火) 23:04:16.22 ID:5HE01N22.net
遅れましたがありがとう。

735 :デフォルトの名無しさん:2018/09/19(水) 23:56:22.00 ID:Pb0Tb1M0.net
木構造を表現するときの、「節」とか「葉」って、どう読みますか?

736 :デフォルトの名無しさん:2018/09/20(木) 12:01:53.37 ID:7WHuQIEO.net
ふし
よう

737 :デフォルトの名無しさん:2018/09/20(木) 12:32:11.09 ID:pCCtAD0d.net
>>735
節 Node
葉 Leaf

738 :デフォルトの名無しさん:2018/09/20(木) 15:10:54.04 ID:x+bQf+aM.net
木をきと読むのならふし、は、
木をもくと読むのならせつ、よう
になる

739 :デフォルトの名無しさん:2018/09/20(木) 19:43:33.25 ID:lFTDGMpz.net
未評価オブジェクトの thunk の語源って何?

740 :デフォルトの名無しさん:2018/09/20(木) 20:48:30.00 ID:xkI4bT5j.net
thunkって?
http://higepon.hatenablog.com/entry/20071202/1196605979

741 :デフォルトの名無しさん:2018/09/20(木) 21:06:35.17 ID:mjuqlfQO.net
thunk you

742 :デフォルトの名無しさん:2018/09/20(木) 21:15:43.07 ID:Qp++lnrA.net
>>740
あんがと

743 :デフォルトの名無しさん:2018/09/20(木) 22:10:00.23 ID:mC+zbID1.net
カリー=ハワード同型
https://ideone.com/RSvVYo

744 :デフォルトの名無しさん:2018/09/20(木) 22:11:42.05 ID:92zkwrbu.net
733です
ありがとうございます

「き」「…」「は」で、「節」の読みを決めかねていましたが、>>738さんの仰るとおり、「ふし」で行くことにします

745 :デフォルトの名無しさん:2018/09/20(木) 22:24:45.13 ID:92zkwrbu.net
すみません、733です

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

他の方々もありがとうございました

746 :デフォルトの名無しさん:2018/09/20(木) 22:59:01.96 ID:O5Bw6BVk.net
>>745
グラフ理論だと、文献にもよるけど、道、路、小道、歩道とか出てきて、統一不能感。

747 :デフォルトの名無しさん:2018/09/21(金) 11:17:49.00 ID:pJEikkxu.net
メモ化とスペースリークが本質的に同じもので、
言わば発酵と腐敗の関係の様なものだと知ったときは感動した。

748 :デフォルトの名無しさん:2018/09/21(金) 16:12:03.67 ID:kcyxUCNO.net
例えw

749 :デフォルトの名無しさん:2018/09/22(土) 03:54:02.44 ID:iTw0SS1T.net
>>746
path でええやん

750 :デフォルトの名無しさん:2018/09/22(土) 05:09:30.37 ID:1NyjNSxI.net
>>749
元の英語がpath, trail, walkとか分かれてるのだが

文学なら訳し分けにくい概念は思い切って意訳することもできるが
技術用語だとそうもいかないのが難しいところ

751 :デフォルトの名無しさん:2018/09/23(日) 15:45:23.97 ID:f8u3bg2b.net
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

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

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

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

ちなみに、これは○○問題などと名前がついているのだろうか。

753 :デフォルトの名無しさん:2018/09/30(日) 14:27:30.56 ID:3FJv0aaM.net
名前をつけるとしたらグラフ○○かな
グラフ簡約のように木をグラフに変える問題

754 :デフォルトの名無しさん:2018/09/30(日) 14:28:16.49 ID:fYmelBV3.net
なんでソートするん?

755 :デフォルトの名無しさん:2018/09/30(日) 14:56:02.92 ID:HUnS5YBa.net
ソートは不要だし、どの言語でもdictionary/mappingにして要素数見るだけの作業のような

756 :デフォルトの名無しさん:2018/09/30(日) 15:13:03.29 ID:0APHfRwQ.net
>>754
ソートすれば、隣同士の要素の同値関係を調べるだけでよくなるから。

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

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

と思ったけど、オレ勘違いしてるかな。
すまん、修理に出したPCがまだ帰ってこず、
試して速度比較できる環境にないんだ。

757 :デフォルトの名無しさん:2018/09/30(日) 15:14:19.07 ID:0APHfRwQ.net
>>752
それも結局 O(n log n) だよね?
これが効率的には限界?

758 :デフォルトの名無しさん:2018/09/30(日) 15:21:38.02 ID:0APHfRwQ.net
>>757
アンカー間違えた。


>>755
それも結局 O(n log n) だよね?
これが効率的には限界?

759 :デフォルトの名無しさん:2018/09/30(日) 16:45:52.09 ID:e88wFP8G.net
一般的に同値関係とは推移律が成り立ってる関係のことを言うので
全ての要素に対して先頭の要素と同値関係が成り立つのなら任意の要素間で同値関係が成り立つ
ちなみにソートして全探索を早く打ち切らせるテクニックのことは貪欲法という

760 :デフォルトの名無しさん:2018/09/30(日) 18:14:08.21 ID:3FJv0aaM.net
dictionary云々はハッシュ関数で非可逆圧縮してからバケットソートするようなもの
バケットソートはO(n)

761 :デフォルトの名無しさん:2018/09/30(日) 19:44:34.07 ID:0APHfRwQ.net
>>759
なるほど、推移律ね、失念してた。

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

みんなありがと。

762 :デフォルトの名無しさん:2018/10/02(火) 09:56:14.61 ID:CXlZ46rN.net
Arch LinuxのHaskellのリポジトリが
1年間メンテされずに死んでいる状態なのを見ると
Haskellもいよいよ落ち目だなと感じる

763 :デフォルトの名無しさん:2018/10/02(火) 10:46:10.19 ID:ckiYxteQ.net
よく知らないけど公式じゃあかんの?

764 :デフォルトの名無しさん:2018/10/02(火) 11:02:45.56 ID:CXlZ46rN.net
そういう問題ではなく
向こうでHaskellへの関心が薄れているという事を言いたかった
メンテしていた人もHaskell離れしたかなとか想像できてしまう

765 :デフォルトの名無しさん:2018/10/02(火) 19:43:32.30 ID:TcTkE961.net
本邦では昨年、Qiitaでのアドベントカレンダーは、HaskellがGoについで投稿数が多かった。

766 :デフォルトの名無しさん:2018/10/05(金) 01:51:04.61 ID:kIWl5j53.net
入門記事を読んだ人が入門記事を書いての繰り返しですやん。

767 :デフォルトの名無しさん:2018/10/05(金) 02:04:05.24 ID:vYMMhlcW.net
>>766
数えたがアドベントカレンダーに限ってはそういうのは10個くらいだった。
120程の記事のうちで

768 :デフォルトの名無しさん:2018/10/06(土) 18:21:22.11 ID:nvkFLHfM.net
ネットでは大手のHaskell導入報告が続いて沸いてるとこだがお前らどんだけ情弱だよ

769 :デフォルトの名無しさん:2018/10/06(土) 18:23:45.87 ID:FAIH8E2E.net
Haskell使ってはいけないような低学歴知恵遅れが
Haskellに興味をもってるからな

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

ヤバイことがおきる

770 :デフォルトの名無しさん:2018/10/06(土) 18:45:45.19 ID:iQB6eFVs.net
サイモンペイトンジョーンズがFacebookいってたけどさ、
バック→Haskell
フロント→React
みたいな構成ってそんなメジャーなんやろか

771 :デフォルトの名無しさん:2018/10/06(土) 20:53:46.19 ID:py9kgJld.net
FacebookはちょっとしたツールをHaskellで作ってますよ、位だと思ってたが…

>>768
> 大手のHaskell導入報告が続いて沸いてる
気づかなかった。他にはどこが?

772 :デフォルトの名無しさん:2018/10/07(日) 02:27:45.21 ID:cvc83VBz.net
ツイ見ろ

773 :デフォルトの名無しさん:2018/10/07(日) 08:23:56.85 ID:VWepfHKo.net
誰の?

774 :デフォルトの名無しさん:2018/10/09(火) 07:56:37.24 ID:pc4ijCgO.net
MonadIO は抽象度が高くて万能すぎ、オーバースペックだよ。
そのせいで、関数の中で何やってるのかシグネチャからは分かりにくいし。
ということで、もっと細かく分けようぜ、という話。
https://chrispenner.ca/posts/monadio-considered-harmful

簡潔で分かりやすい。
こういうのパターンっていうのかな。

775 :デフォルトの名無しさん:2018/10/09(火) 19:53:39.57 ID:ikZDMvLJ.net
githubを見る限りではとても盛り上がっているとは・・・
https://github.com/trending?l=haskell
相変わらず○○をHaskellで書いてみました系のプログラムばかり

776 :デフォルトの名無しさん:2018/10/09(火) 22:29:07.16 ID:1168jJnj.net
なんてことないfizzbuzzもHaskellで書くと楽しくなっちゃうんだよな
初めてプログラムを書いたときのwkwkを思い出させてくれる、それがHaskell

777 :デフォルトの名無しさん:2018/10/10(水) 00:27:00.44 ID:mnDhwBuZ.net
Haskellでfizzbuzzをやろうとすると「数値か文字を出力する関数ってどうやるんだ?」
みたいなところでつまづきがち

778 :デフォルトの名無しさん:2018/10/10(水) 06:58:53.24 ID:h0OQje2u.net
>>774
似たようなことはpurescriptではデフォルト(だった?)

779 :デフォルトの名無しさん:2018/10/10(水) 12:38:31.88 ID:Gg6vIVej.net
数値を文字列型にすれば良い

780 :デフォルトの名無しさん:2018/10/11(木) 01:03:51.12 ID:g6Q8mWEK.net
HaskellでのFIzzBuzzってこんなかんじですか?

https://csacademy.com/code/e8XJJZyv/

781 :デフォルトの名無しさん:2018/10/11(木) 12:44:03.11 ID:kgTYxXGo.net
>>780
そこからガードとmapを覚えると、多分こんな感じ
https://csacademy.com/code/wAIR17mO/

782 :デフォルトの名無しさん:2018/10/11(木) 22:20:09.94 ID:BadrZ8Hx.net
結局は書く人本人が気持ちよくなる為の言語だね
パフォーマンスに優れるとかもないし

783 :デフォルトの名無しさん:2018/10/12(金) 02:12:33.00 ID:C3Ny8aXI.net
>>781
あーやっぱこれだね〜

784 :デフォルトの名無しさん:2018/10/12(金) 07:44:29.57 ID:KfUOHFbE.net
遅延ストリームを扱うならHaskellは速い方だろう
fizzbuzzの規模じゃそれを採用する利点はわからないけど

785 :デフォルトの名無しさん:2018/10/12(金) 08:45:23.98 ID:gMRT6HYK.net
むしろ最速の言語になってほしい。
「Haskellは参照透明性が保証されているために、最適化にアグレッシブになることができる。
そのため、高いコンポーザビリティによってコードは短くなるにもかかわらず、実行速度はあらゆる高級言語の中で最速である」

786 :デフォルトの名無しさん:2018/10/12(金) 19:09:14.98 ID:dVwqKDFL.net
「Haskellは参照透明性を保証するために、最適化を犠牲にした。
そのため、高い冗長性によってコードは短くなるにもかかわらず、実行速度はあらゆる高級言語の中で鈍速である」

787 :デフォルトの名無しさん:2018/10/12(金) 20:38:19.51 ID:P1gVq1Zk.net
purescriptってどうなん?

788 :デフォルトの名無しさん:2018/10/12(金) 20:52:35.33 ID:gMRT6HYK.net
>>786
returnとpureのこと言ってんの?
returnとpureのこと言ってんのーーーーッ!!?

789 :デフォルトの名無しさん:2018/10/13(土) 06:54:47.20 ID:KKBwY8Qn.net
コンパイラフレンドリーに記述したときの速度に概ね不満はないけどコードからパフォーマンスが予測しづらいのがね
そのコードにパフォーマンス上の問題がないか測定してみないとわからない
適切に最適化がかかるかとかスペースリークがないかとか

790 :デフォルトの名無しさん:2018/10/13(土) 07:37:36.01 ID:dpKKSw3w.net
>>789
ベテランになれば実用上問題ない程度には予測できるようになるんじゃね?

俺はまだまだ修行不足だけど

791 :デフォルトの名無しさん:2018/10/13(土) 10:35:05.77 ID:dM3fjinv.net
遅延評価だけでなくガベコレの遅さも問題視されるだろう(予測)
ガベコレやめてオブジェクトの寿命を予測できるレベルなら遅延評価も予測できそうだが

792 :デフォルトの名無しさん:2018/10/13(土) 18:49:50.11 ID:hDWVpOOe.net
Haskellはコンパイルさえ通ればバグは滅多にないが通説になっているけど
実際に使うと想定していた100倍くらいメモリを使っていたりと
原因特定が面倒なミスは激減するという程でもないよね。

793 :デフォルトの名無しさん:2018/10/13(土) 20:07:33.53 ID:H67rAYXW.net
メモリがないならディスクを使えばいいかもね
ファイルに保存できた方が原因特定も楽だし

794 :デフォルトの名無しさん:2018/10/13(土) 20:11:57.62 ID:KKBwY8Qn.net
評価順序とスペースリークは他の言語にはないバグだから逆に増えてるところもある
しかも発見しづらい
サンクのサイズが一定量に収まるかとかIOの評価順序が正格かとかって静的に解析できそうな気がするができんもんかね

795 :デフォルトの名無しさん:2018/10/13(土) 20:39:20.93 ID:H67rAYXW.net
データベース的な仕組みだとスペースリークを放置しているやつが多い
某OSのレジストリとか

796 :デフォルトの名無しさん:2018/10/15(月) 21:26:01.71 ID:e5ZigS6A.net
Nixってなに?

797 :デフォルトの名無しさん:2018/10/15(月) 22:33:00.01 ID:eL3fUBCp.net
くだらない質問で悪いけど質問させてほしい

Haskellでの優先順位について

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

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

1.関数適用
2.演算子
3.関数 <= 最下位の優先順位でいいの? 不確かだけど、F#ではそのような記述があった 希ガス

798 :795:2018/10/16(火) 00:16:52.78 ID:J1KdR+sZ.net
795だけど、質問がうまくまとまってない希ガス

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

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

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

例えば、compfunc = funcA . funcB (3 + 4)があった場合、最初の関数適用にfuncAと後ろの(.)が
が選ばれない理由でもいいかも

799 :デフォルトの名無しさん:2018/10/16(火) 00:29:51.00 ID:Y+LwBtWJ.net
a b c d e fの並びは(((((a b) c) d) e) f)
このa,b,c,d,e,fが関数だとか値のバインドだとか関係ない

そういう話ではない?

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

compfunc = (((.) funcA) (funcB (((+) 3) 4)))
だよね

801 :デフォルトの名無しさん:2018/10/16(火) 00:43:59.67 ID:J1KdR+sZ.net
>>799
それを真としすると
自分の理解では、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)になってないと思う。 (関数というか、カリー化は左結合)

802 :デフォルトの名無しさん:2018/10/16(火) 00:47:21.87 ID:J1KdR+sZ.net
>>800

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

うん、その場合なぜ、

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

関数適用の優先順位が高いのはいいとして、
じゃあ、どの関数から関数適用をするの?というのが、私の疑問

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

うーんいまいちちゃんと説明しきれてないし用語の使い方もアヤシイので
誰か詳しい人頼む

804 :デフォルトの名無しさん:2018/10/16(火) 01:48:57.45 ID:R77VKNPD.net
haskellの構文のBNFを見てみればいいんでない?

805 :デフォルトの名無しさん:2018/10/16(火) 03:22:14.15 ID:q8KCyqRj.net
質問です。
正確には覚えてないんですが、Haskell の型宣言を省略した場合、コンパイラ、インタプリタがよきにはからってくれてなるべく適用範囲が広い型をつけてくれます。
でもそれは Top-Level ではダメって制約があったと思うんですが、この制約なんか名前ついてたとおもうんですがなんでしたっけ?
これなんの為にあるんでしょう?
これ外すための GHC のオプションがあった記憶もあるんですがわかります?
数年ぶりに Haskell つかったら昔とったハズの杵柄がボロボロに orz。

806 :デフォルトの名無しさん:2018/10/16(火) 07:09:37.73 ID:t1I/4hrX.net
>>805
https://wiki.haskell.org/Monomorphism_restriction

807 :デフォルトの名無しさん:2018/10/16(火) 14:35:49.92 ID:4kzhBxnD.net
>>806
あざっす❗

808 :デフォルトの名無しさん:2018/10/16(火) 16:03:37.14 ID:Y+LwBtWJ.net
>>801
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
演算順序を決める丸括弧は展開出来ないよ

809 :デフォルトの名無しさん:2018/10/17(水) 03:18:56.29 ID:QhFRNLWc.net
300行近くあるコードなんですが
Haskellの書き方としてイケてない書き方あったら教えてもらえたら嬉しいです
BASIC言語風のインタプリタです

https://csacademy.com/code/4vUVk5c9/

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

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

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

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

ということで、コンパイラーも理解出来そうなルールになっていそうだし、
>>808とも整合性が取れそうかな

811 :デフォルトの名無しさん:2018/10/17(水) 09:28:42.96 ID:NmM3N1fc.net
>>808さん いろいろThx

812 :デフォルトの名無しさん:2018/10/17(水) 11:49:29.63 ID:RJ0latBv.net
BNF見ればちゃんと分かる
https://www.haskell.org/onlinereport/haskell2010/haskellch3.html
単純化するなら
exp = exp1 | exp1 op exp
exp1 = exp2 | exp1 exp2
exp2 = var | (exp)
二項演算子の優先順位を実現するには別の処理が必要だけど
少なくとも関数適用と二項演算子の計算が並ぶことはない

813 :デフォルトの名無しさん:2018/10/17(水) 12:47:09.36 ID:NmM3N1fc.net
>>812
それが、関数適用とどう関係があるのか、俺には理解できない


とうとう俺もBNFを勉強するときが来たようだw
数年に1度、思い出したようにBNFがネックになるんだけどね
今まで避けてきたw

814 :デフォルトの名無しさん:2018/10/17(水) 12:50:35.76 ID:DKH+Jm9W.net
>>813
どの言語をやるにしても、ちゃんとした理解には必要になるから頑張れ

815 :デフォルトの名無しさん:2018/10/17(水) 14:46:13.41 ID:97sxRiiz.net
>>809
イケてるかどうかなんて個人の好き嫌いだよ。
あなたの中に、こういう感じのコードは好きだけど、こういうのは嫌いというのがあって、
その基準に照らして好きなコードになっていたら、それはあなたの中ではイケてるコード、
嫌いなコードになっていたら、あなたの中ではイケてないコードということだ。
そして、好き嫌いの基準は人それぞれ、千差万別なんだよ。
他人の好き嫌いに無理に合わせる必要はない。

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

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

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

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

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

この基準でいくと、あなたのコードはまったくイケてない。

816 :デフォルトの名無しさん:2018/10/18(木) 00:55:40.72 ID:EL1XNa21.net
>>815
あざっす!勉強になりやした!精進しやす!

817 :デフォルトの名無しさん:2018/10/19(金) 20:20:03.11 ID:XWoSmko3.net
>>815
そういうコードの設計センスはどうやって学んだのですか?

818 :デフォルトの名無しさん:2018/10/19(金) 21:59:48.14 ID:Jw4VQ9Ey.net
>>817
大半はHaskell関係なくて、設計論の話

819 :デフォルトの名無しさん:2018/10/19(金) 22:13:22.28 ID:8Ox5P+xa.net
テストどうすんべとか、保守どうしようとか、合成できるようにしたいとか
考えるとええんやで(こなみ)

820 :デフォルトの名無しさん:2018/10/20(土) 12:25:50.44 ID:u8BRF3D8.net
>>815
+1
http://d.hatena.ne.jp/k3_kaimu/

821 :デフォルトの名無しさん:2018/10/24(水) 13:56:56.60 ID:eHXbzfVY.net
+が正格で:が正格じゃないということの意味を教えてください。

822 :デフォルトの名無しさん:2018/10/24(水) 15:31:36.63 ID:eHXbzfVY.net
じこかいけつしますたw

823 :デフォルトの名無しさん:2018/10/30(火) 14:24:11.19 ID:pQwXzgRa.net
stack の lts-12.x にはなぜ Yampa パッケージがないんだろ?
11.x の頃はあったのに。

824 :デフォルトの名無しさん:2018/11/02(金) 08:09:05.71 ID:QsNsn2yU.net
stackでhp2prettyってどうやってインストールするの?

825 :デフォルトの名無しさん:2018/11/02(金) 15:49:58.24 ID:98olsR6p.net
>>824
stack install hp2pretty
でいける

826 :デフォルトの名無しさん:2018/11/03(土) 07:37:57.15 ID:KyIBYeD2.net
>>825
ありがと。
ヘルプ見て、stack install == stack build --copy-bins って
カレントディレクトリのプロジェクトをビルドしてできた
実行ファイルをコピーするコマンドだと思いこんでた。

827 :デフォルトの名無しさん:2018/11/07(水) 13:48:52.85 ID:VCaKs67w.net
以前の GHC.Stats モジュールには GCStats 型がありましたが、
GHC 8,4,1 からは廃止され、代わりに RTSStats 型および GCDetails 型になったみたいです。

そこで質問です。
以前の currentBytesUsed 関数は今で言うとどの関数に対応、あるいは近いのでしょうか。
gcdetails_live_bytes 関数でしょうか。

828 :デフォルトの名無しさん:2018/11/09(金) 08:25:29.12 ID:rrSKeTdW.net
f :: a -> b -> c
このコロン以降の部分って、英語圏の人は何て発音してるの?

"a to b to c" で良いの? 不自然かな?

829 :デフォルトの名無しさん:2018/11/09(金) 11:20:46.63 ID:DHGOZxva.net
英語圏のコミュニティで日本人なんだけど。。。って質問した方が早いのでは。。。

830 :デフォルトの名無しさん:2018/11/09(金) 11:46:57.84 ID:z1XmYBYX.net
そもそも日本人はどう読むんだよ

831 :デフォルトの名無しさん:2018/11/09(金) 11:47:53.76 ID:p9aTnaT/.net
a arrow b arrow c
call a, b, and c

832 :デフォルトの名無しさん:2018/11/09(金) 12:13:53.97 ID:vhYIIJha.net
漫画と同じだろ
台詞は発音するが絵は発音しない
a b c以外は発音しない

833 :デフォルトの名無しさん:2018/11/09(金) 15:06:42.54 ID:gCUmlTjd.net
エフはエーからビーからシー
って読んでるわ

834 :デフォルトの名無しさん:2018/11/09(金) 19:57:17.40 ID:Rc4d95qg.net
>>830
ほんそれ

835 :デフォルトの名無しさん:2018/11/09(金) 20:22:07.58 ID:rrSKeTdW.net
みんなありがと。

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

>>830
べつに日本語で読まなくてもいいと思うが。
英語でいいんじゃね?

836 :デフォルトの名無しさん:2018/11/09(金) 20:43:11.08 ID:Rc4d95qg.net
それって、そもそも発音する場面なんてあるか?
って意味じゃ・・・

つか、無理にtoで読むとして
f::(a->b)->(a->c)
はどう読むつもりだよ

837 :デフォルトの名無しさん:2018/11/09(金) 21:02:46.92 ID:XtklT8Hz.net
身近にハスケルの話しできる人なんかいないから発音したこと無いぜ

838 :デフォルトの名無しさん:2018/11/09(金) 23:03:09.33 ID:TUe4RwSk.net
Haskell使って仕事してる人に聞いてみるしかないな

839 :デフォルトの名無しさん:2018/11/09(金) 23:07:51.58 ID:9yt5Xmdj.net
>>836
えっと、びーと、えっと、しー

840 :デフォルトの名無しさん:2018/11/09(金) 23:19:25.21 ID:ThtHVzoQ.net
いや〜ん エッチィ

841 :デフォルトの名無しさん:2018/11/10(土) 02:48:27.14 ID:A3qdJv3l.net
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
,は少しの間

842 :デフォルトの名無しさん:2018/11/15(木) 22:01:12.82 ID:ExoyI5Rr.net
2つの型クラスの間に包含関係を付けるのに
MonadからApplicativeのときみたいに
一方を定義すれば自動的に他方が導出されるようにするのと、
FunctorからApplicativeのときみたいに
一方を定義してからでないと他方を定義できないようにするのと、
どっちのやり方がいいのかな

843 :デフォルトの名無しさん:2018/11/15(木) 22:08:48.54 ID:349+82Of.net
変数に再代入できる言語に
慣れきっている者の質問なのですが

[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 []

844 :デフォルトの名無しさん:2018/11/15(木) 22:24:44.73 ID:jJzADtia.net
scanl (+) 0 [1..8] では?
素人なのでわからないけど

845 :デフォルトの名無しさん:2018/11/15(木) 23:19:14.92 ID:5uoUpH2U.net
842です
foldで書いてみました

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

-- fn [1..8]

846 :デフォルトの名無しさん:2018/11/15(木) 23:51:13.43 ID:349+82Of.net
>>843 >>844
どうもありがとうございます。

驚くほど簡潔に書けるものですね!
今まで気にしなかった (++) の有用性を理解しました。
ありがとうございます。

847 :デフォルトの名無しさん:2018/11/15(木) 23:58:57.35 ID:349+82Of.net
>>845
どうもありがとうございます。

驚くほど簡潔に書けるものですね!
今まで気にしなかった (++) の有用性を理解しました。
ありがとうございます。

848 :デフォルトの名無しさん:2018/11/16(金) 00:12:59.47 ID:mACu1uNV.net
842です
いえいえ、私も初学者なので
scanl はともかく、foldl の方はどうかなと

先輩諸兄のレスを待ってください

849 :デフォルトの名無しさん:2018/11/16(金) 01:31:49.81 ID:1zT7OHrw.net
何使ってもいいならData.Listのinitsを使って

map sum $ inits [1..8]

が楽チン。

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

>>843
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

851 :デフォルトの名無しさん:2018/11/16(金) 18:12:37.84 ID:3YKNNj99.net
正直全然読みやすくないのだが、本当に読みやすくないのか俺が手続き脳なだけなのか判断がつかない

852 :デフォルトの名無しさん:2018/11/16(金) 18:56:19.39 ID:0oMzWKAu.net
>>851
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]

853 :デフォルトの名無しさん:2018/11/18(日) 07:38:58.15 ID:2lh9j78G.net
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の部分はどう直せばいいのでしょうか?

モナドも未学習の超初心者ですので、宜しくお願いします(_ _)。

854 :デフォルトの名無しさん:2018/11/18(日) 08:49:53.03 ID:FSPPo7pC.net
if-then-else
で返り値の型が違う

855 :デフォルトの名無しさん:2018/11/18(日) 09:57:38.99 ID:XromDw/4.net
>>854
型を合わせるにはどう対処すればいいのかわからないのですが、
とりあえず、これで動きました。

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]

856 :デフォルトの名無しさん:2018/11/19(月) 18:56:00.44 ID:NOUcIUOi.net
型を合わせるだけなら
https://ideone.com/VBpsvO
もちろん実行時エラー

857 :デフォルトの名無しさん:2018/11/20(火) 08:29:50.51 ID:kos1zZ3I.net
関数型プログラミングでログ出力ってどうやってるんですか?
例えば一つの関数で3回ログ出力したいときとか、Writerモナドだと関数内でエラーが起きたときとかうまく出力されてないですよね?

858 :デフォルトの名無しさん:2018/11/20(火) 10:01:49.03 ID:jmuJusIM.net
flush

859 :デフォルトの名無しさん:2018/11/20(火) 10:53:51.88 ID:QMY+cuul.net
Writerでは例外のようなものを投げることができないからもっと万能なモナドを使う
オブジェクト指向にたとえるとObject型
言語にたとえると動的型付け言語のような万能なやつが必要だ

860 :デフォルトの名無しさん:2018/11/20(火) 15:05:53.63 ID:Bz9DRyU5.net
エラーが起きないように組めばいい

861 :デフォルトの名無しさん:2018/11/20(火) 16:37:16.27 ID:kos1zZ3I.net
素直に副作用のある言語で組めってことですね
了解です

862 :デフォルトの名無しさん:2018/11/20(火) 18:07:48.61 ID:QMY+cuul.net
Haskellにも副作用はある
ただ副作用を使えない制約の型が多くて型チェックが厳しいだけ

863 :デフォルトの名無しさん:2018/11/20(火) 18:35:37.40 ID:kZ/DcFbd.net
>>857
そんな大それたもの作らないから使った事ないけど、ErrorTとか言うのがControl.Monad.Errorに入ってるっぽい。
何れにしても、本格的な開発するならRWHは持っておいた方が良い。

864 :デフォルトの名無しさん:2018/11/20(火) 21:54:07.61 ID:tqW5qw7T.net
RWHの例外周りは古いからPCPH勧めないと

865 :デフォルトの名無しさん:2018/11/24(土) 12:20:05.11 ID:dO0ZWwxC.net
haslell2010.pdfによくでてくる記号なんだけど”⊥”ってどう意味ですか?
値とか型ぽいんだけど、すごいH本とかの索引にはそんなん無いし。

https://www.haskell.org/definition/haskell2010.pdf

866 :デフォルトの名無しさん:2018/11/24(土) 13:06:50.85 ID:4kdGLnPd.net
直交

867 :863:2018/11/24(土) 13:10:25.20 ID:dO0ZWwxC.net
例えば、こんな書き勝たされてるんだけど

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”って何だろう?

868 :デフォルトの名無しさん:2018/11/24(土) 13:16:55.35 ID:A/C05uoV.net
数学やれようざい

869 :デフォルトの名無しさん:2018/11/24(土) 13:24:01.18 ID:dO0ZWwxC.net
ええええ 本当に直交って意味なの?

数学なら意味は分かるが(関数解析も入門とか初歩レベルなら読んだ)
プログラミング言語で直交ってどう意味?

870 :デフォルトの名無しさん:2018/11/24(土) 13:28:15.64 ID:4kdGLnPd.net
独立

871 :デフォルトの名無しさん:2018/11/24(土) 13:38:59.48 ID:tsQBCVAv.net
https://ja.wikipedia.org/wiki/ボトム型

872 :デフォルトの名無しさん:2018/11/24(土) 13:43:43.78 ID:dO0ZWwxC.net
>>871
Thx ようやくまともな答えが

Haskellやってて面白いのが、新しい概念が増えていくのがうれしい 遅延評価とか

873 :デフォルトの名無しさん:2018/11/24(土) 13:59:53.00 ID:1C+vWWG1.net
>>865
使わない値(_)や、未定義の値や型として使われてるね。
文脈から意味を汲み取るしか無い。

874 :デフォルトの名無しさん:2018/11/24(土) 14:01:51.50 ID:1C+vWWG1.net
https://i.imgur.com/NV5asbm.jpg


https://i.imgur.com/bC1cIwc.jpg

875 :デフォルトの名無しさん:2018/11/24(土) 14:15:54.52 ID:1C+vWWG1.net
take undefined [] = undefined ― 入力待ち(Carl + Cで強制終了必須)
take 0 undefined = []

⊥をundefined = undefinedと定義してghci で試したとしても、プログラミングHaskellの説明と同じ動きをする。

876 :デフォルトの名無しさん:2018/11/25(日) 11:21:25.73 ID:gET8Juo7.net
undef :: b -> a
undef ined = undef ined

これが ⊥ -> a とか () -> a とか () -> ⊥ とかになるせいで
⊥と()を区別する意味がわからなくなる
再帰禁止すれば違いがわかる

877 :デフォルトの名無しさん:2018/12/03(月) 16:13:07.05 .net
Haskell では明示的に instance 宣言しなければ、ある class の要件を充たしていることをコンパイラが認識してくれません
Go ではインターフェイスの要件を充たしていれば明示的に宣言しなくても型システムがコンパイル時に暗黙的に推論してくれるそうです(日記帳)

878 :デフォルトの名無しさん:2018/12/05(水) 06:15:37.43 .net
GitLab へ引っ越すんですって?

879 :デフォルトの名無しさん:2018/12/11(火) 10:40:31.76 ID:w4wbcBCq.net
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)

バブルソートのつもり。。。
バブルと言うより勝ち抜きソートって感じだけど。
アルゴリズム図鑑アプリで動作見ながら、リストは頭からだから交換はコストかかるんでこんな形になった。

880 :デフォルトの名無しさん:2018/12/11(火) 10:48:30.82 ID:w4wbcBCq.net
動作はこんな感じ。
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で見れば浮かび上がる様に見える(?)

881 :デフォルトの名無しさん:2018/12/11(火) 12:12:51.51 ID:b3hhTnN8.net
スタックがヤバそう

882 :デフォルトの名無しさん:2018/12/11(火) 13:48:28.37 ID:w4wbcBCq.net
[a] -> [b]な再帰関数はスタック消費しないよ。

883 :デフォルトの名無しさん:2018/12/16(日) 14:26:10.12 ID:d+Ts3kFC.net
よりスマートに
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)

884 :デフォルトの名無しさん:2018/12/18(火) 11:44:17.44 ID:/M0/bFGF.net
歯透ける

885 :デフォルトの名無しさん:2018/12/18(火) 12:01:03.47 ID:NUNmy+BV.net
パンツ透ける

886 :デフォルトの名無しさん:2018/12/18(火) 14:51:09.99 ID:LIt8HoLP.net
>>882
Haskellよくわかってないんですが、
y:bsort' [] xs
の部分も末尾再帰でなくともスタック消費しないんですか?

887 :デフォルトの名無しさん:2018/12/18(火) 17:19:38.38 ID:D1bDvywT.net
余再帰でも最適化かかる場合があるとかないとか

888 :デフォルトの名無しさん:2018/12/19(水) 09:01:32.80 ID:xYxnZ8u2.net
最適化って言うけど最適化無しのddump-asmでもあんまりcallは使われてないんだよね
詳しくは知らないけど再帰と言えど少なくともWHNFで値を返すわけだから
サンクに入った再帰呼び出しを実際に再帰的に呼ぶ必要も無いってことだろう
つまり実際の呼び出しに評価元のスタックが使われるんだとしたら
リストを評価する場合には伸びだ分のスタックがコンスセル毎にクリアされる

889 :デフォルトの名無しさん:2018/12/20(木) 07:30:09.47 ID:y4SKaDG8.net
https://ideone.com/r4bLq1
問題ない

890 :デフォルトの名無しさん:2018/12/20(木) 21:14:07.04 ID:X0Fr2Ixv.net
これバブルソートじゃなくて挿入ソートだよね

891 :デフォルトの名無しさん:2018/12/21(金) 00:03:36.39 ID:1VggrQKb.net
bsort = unfoldr (uncons . foldr step [])
where step x [] = [x]
step x (y:ys) | x <= y = (x:y:ys)
| otherwise = (y:x:ys)

892 :デフォルトの名無しさん:2018/12/21(金) 13:18:39.50 ID:V4JbVdgQ.net
スタックマシンじゃなくてセルオートマトンだったらスタック消費しないよね

893 :デフォルトの名無しさん:2018/12/22(土) 08:09:42.23 ID:9xYrH7YE.net
Prelude.div関数について。

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

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

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

basement の Basement.Numerical.Multiplicative.div が良い感じですが、
もっと良いものはあるでしょうか。

894 :デフォルトの名無しさん:2018/12/22(土) 09:55:43.41 ID:NgVSh9Jk.net
>>890
(y:bs x ys)は遅延評価だから捜査逆のバブルソート

895 :デフォルトの名無しさん:2018/12/22(土) 10:39:40.85 .net
   ミ    /、`二//-‐''"´::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 /
   | | | |

896 :デフォルトの名無しさん:2018/12/22(土) 11:38:44.98 ID:SGb2VOwM.net
>>893
その「気持ち悪い」の方がよっぽど意味不明なんだから
divの意味が分からないくらい許してやれよ

897 :デフォルトの名無しさん:2018/12/22(土) 15:07:06.49 ID:j3oO0IK0.net
>>893
気持ちわかる。import Data.Integral (div) くらいでやりたいよね。
import Prelude (Integral(div)) はどうかな

898 :デフォルトの名無しさん:2018/12/23(日) 00:20:58.06 ID:OufBT+Yp.net
>>877
公称的部分型(ノミナルサブタイピング)
構造的部分型(ストラクチャルサブタイピング)

899 :デフォルトの名無しさん:2018/12/23(日) 00:50:21.75 ID:2lSG181k.net
型推論って、いったい何を目指してるの?
コンパイラは推論できても、人間にとって読みやすいものと思えないんだけど

900 :デフォルトの名無しさん:2018/12/23(日) 02:11:43.05 ID:YigQT2JG.net
template<typename T>って宣言してもどうせ読めないから宣言しないのを目指す

901 :デフォルトの名無しさん:2018/12/23(日) 02:17:29.50 ID:zMRMmtKp.net
>>899
関数型言語だと型を考えることがプログラミングだと言うね

902 :デフォルトの名無しさん:2018/12/23(日) 16:02:25.42 ID:dHWagv9n.net
Practical Web Development with Haskellってのがまだ70Pくらいしか読んでないけど
認証つきWebアプリをいちから写経しようぜってつくりで初〜中級者にいい感じっぽい
Data.Hasとかこれで初めて知ったわ

903 :デフォルトの名無しさん:2018/12/23(日) 19:07:09.70 ID:VkAdoKxx.net
>>896
気持ち悪いは言い過ぎでした。
あまりハッピーではない、くらいです。

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

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

でもアドバイスは有り難いです。
参考にさせてもらいます。

904 :デフォルトの名無しさん:2018/12/23(日) 19:28:31.47 ID:14edUGfJ.net
Preludeなんてものは要らなくて、divはData.integralに入ってて、divを使うには毎回Data.Integralからimportするのが理想って認識で合ってる?
Preludeのその他諸々の関数も含めて

905 :デフォルトの名無しさん:2018/12/23(日) 20:21:12.14 ID:YigQT2JG.net
LinuxにたとえるとデフォルトのGUIなんてものは要らなくて
無数のディストリビューションから選択するのが理想という認識

906 :895:2018/12/23(日) 20:57:49.01 ID:gIQVihKw.net
>>903
http://hackage.haskell.org/package/base-4.12.0.0/docs/src/Prelude.html
を読んで思いついたんだけど、
import GHC.Real (div)
はどうだい。プレリュードはそのモジュールをre-exportしてる。

907 :デフォルトの名無しさん:2018/12/24(月) 17:05:01.14 ID:ovQS6rqM.net
>>902
Javerが4年で手本になるこなれたコードを書けてるのか疑問なんだがどんな?

908 :デフォルトの名無しさん:2018/12/24(月) 18:43:23.42 ID:ovQS6rqM.net
うわああああこの前Amazon.comから輸入したHaskellの洋書Amazon.co.jpでも売ってたああああ
失敗した

909 :デフォルトの名無しさん:2018/12/24(月) 20:36:56.95 ID:OvWyYJqn.net
当初から比べたらco.jpの洋書の品揃えはずいぶん充実したよね
アカウントを未だ両方持っているけど米版は使わなくなった

910 :デフォルトの名無しさん:2018/12/25(火) 11:18:00.52 ID:yeWprDEr.net
洋書なら輸入の方が安いって話では

911 :デフォルトの名無しさん:2018/12/25(火) 12:11:51.62 ID:3tfaERbL.net
専門書だと、各地域の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の学習にはなんの役にも立たないので、その分野の数学をやりたい場合だけ買ってね。

912 :デフォルトの名無しさん:2018/12/25(火) 22:13:34.24 ID:S7Os6UpT.net
>>906
ありがとうございます。

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

ただそのモジュール、base パッケージで公開されていません。
https://www.stackage.org/lts-13.0/package/base-4.12.0.0
これを使うのは、Internal 系モジュールを使うよりもっとヤバくないですか?

913 :デフォルトの名無しさん:2018/12/28(金) 21:37:48.04 ID:+Hytqb0t.net
Haskellerって薬漬けのヤベー奴しかいねーのかよwww
http://fumieval.hatenablog.com/entry/2018/12/27/213853

914 :デフォルトの名無しさん:2018/12/28(金) 21:49:01.05 ID:Wkr1Do53.net
なんか、Haskellなかなか理解進まない

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

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

情報系の教科書でも、Haskellの教科書でもどちらも大歓迎

915 : :2018/12/28(金) 21:53:15.13 ID:8AWKvvCO.net
>>913
エビリファイなんて飴玉ですよ…
私はセレネース(ハロペリドール)とベゲタミンでなんとか生きています…
https://ameblo.jp/kyupin/entry-10102907726.html
「ベゲタミンAおよびBは神の薬で、あれを思いついた人はたぶん天才だと思う。あれは合剤だから神なのであって、あの成分をバラバラに処方すると、なぜかベゲタミンほどは効かない。まぁいずれにせよ絶妙な組み合わせなのだろう。」

916 :デフォルトの名無しさん:2018/12/28(金) 23:38:37.19 ID:8YrCKoD/.net
もともとポエマーな感じだったけどガチやん・・・

917 :デフォルトの名無しさん:2018/12/28(金) 23:49:03.28 ID:6JJumxSW.net
>>914
遅延評価実装の仕組みが知りたいと?

918 : :2018/12/29(土) 00:32:49.36 ID:lsgoHDjS.net
>>916
これらより強力な薬はいろいろ見聞きする限りではないようですね…

919 :デフォルトの名無しさん:2018/12/29(土) 02:03:55.74 ID:Btke7xay.net
何が目的で何がわからないかわからないとググって出てきたページ読めくらいしか言えない

920 :デフォルトの名無しさん:2018/12/29(土) 05:40:28.14 ID:KKd0HoHx.net
この人殺人予告まがいのことしてた人じゃん

921 :デフォルトの名無しさん:2018/12/29(土) 08:40:48.37 ID:+cssvHV/.net
>>913
この人、技術的にはなんか凄腕っぽくてフォローしてたけど、こんな人だったんか……(困惑)

922 :デフォルトの名無しさん:2018/12/29(土) 10:05:29.13 ID:sjBWTUOw.net
今朝のテレビの天才特集で
西川徹でてたわ pfiのひと

923 :デフォルトの名無しさん:2018/12/29(土) 11:49:29.33 ID:um1nA50l.net
>>917
うんにゃ 一番知りたいのは レスポンス周り
ちょっと、混乱中なのでうまく書けないんだけど

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

Webで得られるのは、どうしても断片的な知識になるんで、個々の知識が繋がりづらいのと、
あとはちょっと信頼性が落ちてたりする(初心者には間違いが分かりづらい)
ある程度知識がしっかりしてる人には、内容の真偽を含めそれで十分なのかもしれないけど

924 : :2018/12/29(土) 12:04:31.84 ID:lsgoHDjS.net
>>920
「殺人予告」と「殺人予告まがい」とは違うものですよね…

925 :デフォルトの名無しさん:2018/12/29(土) 12:16:13.76 ID:UYTJL+lP.net
>>923
SICP読んだ後、言語ごとの構文解析ちゃんと調べればいいんじゃないかな

926 :デフォルトの名無しさん:2018/12/29(土) 12:54:03.27 ID:EK4sWEwk.net
>>921
ほんそれ

927 :デフォルトの名無しさん:2018/12/29(土) 13:00:10.35 ID:um1nA50l.net
>言語ごとの構文解析ちゃんと調べればいいんじゃないかな
構文解析という言葉になじみが無いんですが
Haskellの場合具体的に何をすればいいですか?
(情報系の教育は受けてないんで ただ、これからそっち系を漁ろうとはしているけど)


SICPは多分自分の好物w 読みたい候補に入れとく

928 :デフォルトの名無しさん:2018/12/29(土) 13:48:17.43 ID:0jIQbIRd.net
形式的なのはhaskell language reportってのがあるけど
ボトム(undefinedとか)の扱いが定義されてるだけでサンクの項目は無いね
ボトムの定義としては評価してみないと区別できないってことだから
これを関数に渡してもエラーにしないって感じで評価方法が規定されてる

929 :デフォルトの名無しさん:2018/12/29(土) 14:32:03.91 ID:Btke7xay.net
基本的な知識なしに局所的に理解しようとするからわからないんでしょ
数冊テキスト読んでるうちにたいていの疑問は消える

930 :デフォルトの名無しさん:2018/12/29(土) 14:51:54.06 ID:HTMRsjvp.net
The implementation of functional programming languages
https://www.microsoft.com/en-us/research/wp-content/uploads/1987/01/slpj-book-1987-small.pdf

931 :デフォルトの名無しさん:2018/12/29(土) 16:29:44.50 ID:um1nA50l.net
取りあえず、>>914の質問の回答してくれてありがとう >> 回答者

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

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

とはいえ、もうちょっと具体的な質問が出来るよう出直してきます

932 :デフォルトの名無しさん:2018/12/29(土) 17:00:23.21 ID:e0g6OpD4.net
実践的なのはこんなの webだけど
スペースリーク、その傾向と対策 - Qiita
https://qiita.com/ruicc/items/bfa659c2ef9e1f75f7e1

933 :デフォルトの名無しさん:2018/12/29(土) 17:36:10.57 ID:FOaDygsP.net
遅延評価は並列処理を学ぶときにちょろっと深くやるくらいな印象
Haskellにおける並列実行 - 純粋関数型魔境 http://amothic.hatenablog.jp/entry/2013/10/09/220004
『Haskellによる並列・並行プログラミング』の中で
この記事の前半部分をもうちょっと詳しく書いてるけど
それでも10ページ未満くらいの分量

934 :デフォルトの名無しさん:2018/12/31(月) 00:40:09.80 ID:eNA22sUO.net
参照カウントを除けばGCのアルゴリズムはみんなメモリ解放を遅延しているという事実
のせいでC++のようなGC無し言語の支持率が異常に高い

935 :デフォルトの名無しさん:2018/12/31(月) 11:19:16.45 .net
GC管轄外領域にROMを作って高速に読み出す機能ができたんですって?

936 :デフォルトの名無しさん:2018/12/31(月) 20:24:52.37 ID:/+DS/TZA.net
>>912
「公開されてないモジュール」というのがあるんだ…
stackageから探せなくて、 GHC.Real のように https://hackage.haskell.org/package/base-4.12.0.0
でリンクなしになってるモジュール。これらは一体どういうものなの? どうやって作る?

外部から使いたいモジュールは、cabal ファイルの exposed-modules セクションに並べる。
テストなどのために外から使いたいが、あまり使って欲しくないものをInternalモジュール配下に。
使用を禁止したいものは exposed-modules から外す。
モジュールの公開はその三択だと思ってた。

937 : :2019/01/01(火) 00:46:23.00 ID:I2U7Qk8Q.net
GHC.Realこれ?

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

https://www.haskell.org/haddock/libraries/GHC.Real.html

938 :デフォルトの名無しさん:2019/01/01(火) 11:32:28.92 ID:9+QtWrOm.net
それです

939 :デフォルトの名無しさん:2019/01/01(火) 17:19:58.78 ID:7ZW7L+dS.net
HRR(Haskell relational record)で遊んでるんだけど、
ポスグレのreturning○○に対応したinsert文を生成する機能てないかな?
オートインクリメントある表とかはべたにクエリ書いたほうが楽に感じてしまう

940 :デフォルトの名無しさん:2019/01/05(土) 19:51:01.28 ID:iNZzFN2I.net
Javaでいえばルール付きインターフェイスがHaskellのモナドという理解でOK?
実装時インターフェイスよりちょっと守るべきルールと性質が多いのがモナド。
型はJavaでいえば複数のインターフェイスを継承できる感じでいいですか?

941 :デフォルトの名無しさん:2019/01/05(土) 20:04:34.05 ID:KrQndHog.net
モナドは単なる自己関手の圏におけるモノイド対象だよ。

942 :デフォルトの名無しさん:2019/01/05(土) 22:45:17.04 .net
モナドは単なる自己関手の圏におけるモノイド対象だよおじさん「モナドは単なる自己関手の圏におけるモノイド対象だよ」

943 :デフォルトの名無しさん:2019/01/06(日) 00:04:04.86 ID:13gMXODg.net
Javaのクラスやインターフェイスは
メソッドの定義を変えられるがメソッドの型は変わらない
例えばObjectクラスのメソッドの定義を変えてもメソッドの型が変わらないので
型チェックが甘い

Haskellのクラスはメソッドの型も変わる

944 :デフォルトの名無しさん:2019/01/06(日) 09:16:44.99 ID:7U4qFACZ.net
>>943
なるほどなあ勉強不足でした。
聞いてみてよかったです。

945 :デフォルトの名無しさん:2019/01/06(日) 20:47:40.51 ID:8Nv8H8lo.net
「where」の日本語読みに関してだけど
「左記の名前(モジュール名/クラス名/インスタンス名/関数名)が
示す物の中では以下の定義が行われています。」
て言う読み方でいいの?

英語の関係福祉 where の「〜する所の」と同じ意味でいいのかどうか。

946 :デフォルトの名無しさん:2019/01/06(日) 21:59:18.26 ID:RK31I1jj.net
右な左。

947 :デフォルトの名無しさん:2019/01/07(月) 06:30:03.04 ID:Tzw/TAIJ.net
>>945
haskell の where は数学の教科書なんかに同じ使い方で普通に出てくる。
というか、haskell が数学から借りてきた。

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

f = g x where x = ...

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

みたいに読めばいい。

948 :デフォルトの名無しさん:2019/01/07(月) 14:03:18.35 .net
ん? x の定義は where?となるから先回りして where と書いてる

949 :デフォルトの名無しさん:2019/01/08(火) 00:20:15.62 ID:t9mDJmjK.net
数学の教科書・・?

950 :デフォルトの名無しさん:2019/01/08(火) 11:30:51.32 ID:GKZx39y6.net
SQLか

951 :デフォルトの名無しさん:2019/01/08(火) 11:56:51.91 ID:ZgpKo6ms.net
>>949
ごめん、何が ? なのか分からないんだが。
ぼかさず具体的に質問してくれると助かる。

教科書とか参考書とか読み物とかでよく見るよ。
例えば、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.
-----

952 :デフォルトの名無しさん:2019/01/09(水) 03:54:07.58 ID:bacokaDQ.net
フォルダの中身を列挙再帰するのって1回で1階層しか見れなくてIOモナドぶっかけられるから
1関数の中のwhereの中で回すしかない感じですかね?

953 :デフォルトの名無しさん:2019/01/09(水) 06:47:34.41 ID:SOqsE/HW.net
数学の教科書「関数の中・・?・・スコープ・・?」

954 :デフォルトの名無しさん:2019/01/09(水) 16:57:29.61 .net
数学は無限に高速なCPU、無限に使えるメモリを前提として処理を議論する

955 :デフォルトの名無しさん:2019/01/09(水) 19:12:59.65 ID:Me/cgKlM.net
なんだ高卒か

956 :デフォルトの名無しさん:2019/01/09(水) 19:19:36.45 ID:vBKfOHsm.net
時間を考慮に入れないなら高速である必要すらない

957 :943:2019/01/14(月) 00:22:49.99 ID:O/Nk4r6k.net
>>947 >>946
ありがとうございます。
コード読む時に使わせて頂きます・

958 :デフォルトの名無しさん:2019/01/14(月) 01:01:35.99 ID:oPHKHfrN.net
944は心理か何かか?俺には理解出来んw

959 :デフォルトの名無しさん:2019/01/14(月) 10:58:12.74 ID:hZswZX0S.net
>>952
質問の意味がよく分からないが、
where じゃなくても、自分自身を再帰的に呼べばいいのでは?

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

これじゃダメ?

960 :デフォルトの名無しさん:2019/01/14(月) 14:48:46.72 ID:hZswZX0S.net
>>959
シグネチャを間違えた

directiries :: FilePath -> IO [FilePath]

961 :デフォルトの名無しさん:2019/01/14(月) 16:11:26.66 ID:tN6VIVTj.net
-- ほげ :: FilePath -> IO (Bool, [FilePath])
(d, paths) <- ほげ path
if d then foldr (>>) (return ()) $ map 再帰 paths
else ふが

962 :デフォルトの名無しさん:2019/01/15(火) 19:39:53.51 ID:bDKJ3jpf.net
ディープラーニング用ライブラリ 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 です。

963 :デフォルトの名無しさん:2019/01/15(火) 19:48:20.12 ID:URfldHzA.net
ディープラーニングにHaskellを使おうとしていることが問題

964 :デフォルトの名無しさん:2019/01/15(火) 23:33:41.05 ID:fNWkI4iJ.net
>>962
>>=2.2 && <2.14

965 :デフォルトの名無しさん:2019/01/16(水) 00:57:57.45 ID:Rf1WUy5G.net
>>962
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 と同じっぽい)

966 :デフォルトの名無しさん:2019/01/16(水) 17:48:25.37 ID:f7x8T+kZ.net
>>964
ごめんなさい、何を指摘されているのか分かりませんでした。

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


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

お陰様で作業を進められそうです。
ありがとうございました。

967 :デフォルトの名無しさん:2019/01/17(木) 21:37:06.39 ID:R/7pNsew.net
cabal new-ナントカ
を日本語で解説してほしい

968 :デフォルトの名無しさん:2019/01/19(土) 10:09:04.13 ID:XQ+5XzTr.net
>>963
> ディープラーニングにHaskellを使おうとしていることが問題

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

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

使った主なパッケージは、
学習用
 apecs
 apecs-physics
 grenade
確認用 (アニメーション)
 apecs
 apecs-gloss
 gloss
です。
あとは細々としたものを幾つか。

969 :sage:2019/01/19(土) 21:02:03.11 ID:K21HdJ2L.net
Haskellの「->」という記号の読み方はありますか?
他のプログラミング言語だと「->」には「アロー演算子」という名前が付けられていますが、Haskellの場合は何という名前なのでしょうか?

970 :デフォルトの名無しさん:2019/01/19(土) 22:34:36.32 ID:nurYb0Ef.net
>>969
型における(->)の英語での読み方は>>841 によると、toもしくはarrow

971 :デフォルトの名無しさん:2019/01/20(日) 14:28:23.05 ID:J4e1TPCS.net
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 } はできる。

972 :デフォルトの名無しさん:2019/01/20(日) 19:41:43.18 ID:xPUxeMcd.net
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
とか?

973 :デフォルトの名無しさん:2019/01/21(月) 21:42:26.44 ID:xU0cTMEl.net
GHC(Haskell)の上流リポジトリ等がGitLabに移行しました 2019年01月20日
https://qiita.com/takenobu-hs/items/a2eeb327088bb1d2fe77

974 :デフォルトの名無しさん:2019/01/22(火) 18:35:04.27 ID:Lbcg1DYs.net
>>972
なるほど、頭いいな。
採用させてもらうよ。
ありがとう。

975 :デフォルトの名無しさん:2019/01/23(水) 00:07:49.58 ID:UhkibQh6.net
既出かも知れませんが
「 木 (tree) 」の読み方について質問です。

化学では「塩」をシオではなくエンと読む様に
「 木 」もモクやボクと読むのか
訓読みでキと読むのか確認したいです。

976 :デフォルトの名無しさん:2019/01/23(水) 00:12:29.03 ID:e48tmJNP.net
>>975

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)

977 :デフォルトの名無しさん:2019/01/23(水) 00:18:53.14 ID:UhkibQh6.net
>>976
了解です。
薔薇木をバラキと読むのに違和感があったので
確認してみたかったです。

978 :デフォルトの名無しさん:2019/01/23(水) 00:19:35.51 ID:Ysgk2cll.net
その質問は既出じゃないと思う

979 :デフォルトの名無しさん:2019/01/23(水) 00:27:46.89 ID:UhkibQh6.net
そうでしたか。

しかし良く考えてみたら
薔薇木(ばらぼく)って同性愛雑誌みたいでした。

980 :デフォルトの名無しさん:2019/01/23(水) 12:32:21.82 ID:8dbvKkbn.net
薔薇刑 ← 読めない

981 :デフォルトの名無しさん:2019/01/23(水) 15:57:01.39 ID:I7vJASel.net
葉は
枝えだ
木き
根ね

982 :デフォルトの名無しさん:2019/01/23(水) 16:07:41.36 ID:OFN8YGgg.net
男根おとこね

983 :デフォルトの名無しさん:2019/01/24(木) 00:53:14.43 ID:cVpDBcbd.net
kotlin以下w
kotlinってあれだろ鳥箱の中で争わせて、強いものが… キャー

【IT】習得したいプログラミング言語、したくない言語 プログラミング言語実態調査 2018
https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00501/111200004/

984 :デフォルトの名無しさん:2019/01/24(木) 10:45:53.06 ID:TePOwsZ1.net
擬人化してくれ

985 :デフォルトの名無しさん:2019/01/24(木) 17:57:50.91 .net
Haskell は初期学習コストが高すぎるのと、圏論イキリおじさんが煙に巻くので近寄りがたい雰囲気を醸している

986 :デフォルトの名無しさん:2019/01/24(木) 18:25:57.35 ID:wii/ewut.net
ちょっと勉強したけど、なんか仕様がコロコロ変わってるような気がして、
本格的に手を出しにくい

987 :デフォルトの名無しさん:2019/01/24(木) 18:27:39.45 ID:tqh7mtUe.net
mtl パッケージの Control.Monad.Reader モジュールで MonadReader クラスが定義されています。

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

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

この制約がないと何が不都合なのでしょうか。

988 :デフォルトの名無しさん:2019/01/24(木) 23:18:18.45 ID:9BqsZZXL.net
関数従属を消すとコンパイルが通らなくなる例
https://ideone.com/sdajAE

具体的には instance Monad m => MonadReader r (ReaderT r m) の他に
instance Monad m => MonadReader () (ReaderT r m) もあり得るから
MonadReaderに関数従属がないとReaderTの型クラスのようには扱えない

989 :デフォルトの名無しさん:2019/01/25(金) 00:43:33.65 .net
m → r
mを決めると自動的にrも決まるという意味だろうか
いまモナドを、ReaderT r m と決めた
だからそこで使われる r が自動的にMonadReader r 〜の r となるのだ

このように素人目に推測できる

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

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

returnとかclassとか、普通の言語にも同じ用語が出るからって、同じ意味と考えないほうがいい。
まっさらな頭で挑むべし。
(そういう意味で初心者の方が理解が早い)

991 :デフォルトの名無しさん:2019/01/25(金) 18:42:51.74 ID:sjWwXpoO.net
>>988
例は理解できました。
話も、

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

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

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

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

MonadReaderに関数従属がないと、
ReaderT型がMonadReaderクラスのインスタンスとして定義できない、
という事でしょうか。

992 :デフォルトの名無しさん:2019/01/25(金) 20:09:29.73 ID:RwHnV4/s.net
C++のtemplateのような制約がないダックタイピングに不都合を実感した者は理解が早い
初心者より早い

993 :デフォルトの名無しさん:2019/01/25(金) 20:13:55.21 ID:DHFZGKPe.net
>>991
型推論において instance Monad m => MonadReader (ReaderT r m) のように扱えると言いたかっただけです
上のコードが意味することを言い換えたつもりだったんですが
言葉としては Monad m => ReaderT r m をMonadReaderのインスタンスのように扱える
とした方が正しかったですね

994 :デフォルトの名無しさん:2019/01/26(土) 19:27:32.21 ID:2lj1Pdko.net
>>993
言葉としては 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 です。

995 :デフォルトの名無しさん:2019/01/26(土) 20:36:51.56 ID:YCYcr/Gx.net
>>994
instance Monad m => MonadReader r (ReaderT r m)
この場合インスタンスなのは r と Monad m => ReaderT r m の組み合わせだと理解しているんですが
いずれにしても言いたかったのは前の方の r を無視して扱えるようになるということで
なにか間違ってるようなら忘れてもらって構わないです

996 :デフォルトの名無しさん:2019/01/27(日) 14:38:45.77 ID:joZtszNb.net
UndecidableInstancesだからでは?
自分も理解しきれてないけど

997 :デフォルトの名無しさん:2019/01/27(日) 20:30:51.01 ID:wGWJPOk3.net
質問ではなく否定ができる者は理解が早い
どういうことでしょうか、ではなく、ここが間違っているのを知ってる俺は正しい
その方が圧倒的に早い

998 :デフォルトの名無しさん:2019/01/28(月) 02:18:47.10 ID:UwyAz0OY.net
すいません。
初心者でこんなこと聞くのもお恥ずかしいんですが、なにをどうググっても情報がでてこないのでお聞きします。
いま話題になってる>>987さんの

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

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

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

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

“| m -> r”

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

と言われてますが、”制約” とはなんですか?
こんな質問して話の腰を折ってはいけないとなんとか自力でググりまくったんですが全くこの記述の意味を理解する情報を発見することはできませんでした。
載っている参考文献でも結構ですのでどなたか教えていただけませんか?

999 :デフォルトの名無しさん:2019/01/28(月) 12:06:40.91 ID:kUDYAe70.net
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

1000 :デフォルトの名無しさん:2019/01/28(月) 12:15:36.89 ID:LeZdguT6.net
>>998
私が元の質問者ですが、気にしないで質問なさってください。

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

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

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

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

それと | m -> r は、>>988 でもチラッと名前が出てきましたが、日本語では「関数従属」です。
「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 の並び順番に気をつけてください。

1001 :デフォルトの名無しさん:2019/01/28(月) 12:17:56.53 ID:H3y/QtCH.net
すみません質問いいですか?

1002 :デフォルトの名無しさん:2019/01/28(月) 12:39:33.26 ID:MTZ0KVk9.net
いいよ

1003 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1003
264 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★