890: 関数型プログラミング言語Haskell Part31 (547)
2ちゃんねるブックマークは2ちゃんねる(2ch.sc)のログをブックマーク出来るビュアーです。


890: 関数型プログラミング言語Haskell Part31 (547)

【pc】
pp 

1 デフォルトの名無しさん

ageteoff

2017/09/27(水) 02:33:08.70 ID:2XAqPuH2

関数型プログラミング言語 Haskell について語るスレです。

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

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

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



【pc】




スレッドの最初から全部を見る 人気スレッドリスト




378 デフォルトの名無しさん
2017/12/23(土) 15:19:44.84 ID:97OmZxF2

べつに誰も何も言ってないだろ
おまいがそう解釈しただけでは

379 デフォルトの名無しさん
2017/12/23(土) 15:21:59.98 ID:Jhot/ru+

Haskellと関係ない話なんだよな

380 デフォルトの名無しさん
2017/12/23(土) 16:45:07.96 ID:UP/Zv3hx

Haskell で開発されたアプリケーションのソースで、こういう形のものがある。

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

main :: IO ()
main = runApp

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

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

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

このような実装の runApp 関数が実際に担っているロールはどれもアプリのエントリポイントだ。
しかし、これはまさに main 関数のロールではないだろうか。
main 関数が本来担う仕事を他の関数に丸投げする事にどのような意味やメリットがあるのだろうか。

381 デフォルトの名無しさん
2017/12/23(土) 17:10:50.49 ID:E55wgL+K

PEZYのスレ立ててそっちでやってください

382 デフォルトの名無しさん
2017/12/23(土) 17:47:20.71 ID:RG/9qhez

380
runAppとは別の処理をrunAppの前後に入れるときにmainに書き足すだけで楽とかじゃね?

383 デフォルトの名無しさん
2017/12/23(土) 19:57:22.35 ID:deN0FCLD

おれはmainに直接書くわ。Haskell以外でもそうしてる。

384 デフォルトの名無しさん
2017/12/23(土) 20:06:53.43 ID:ZaJB/ccT

stackで新規プロジェクト作成するとmainからsomeFuncに飛んでるよね

385 デフォルトの名無しさん
2017/12/23(土) 20:30:46.09

そう…(無関心)

386 デフォルトの名無しさん


2017/12/23(土) 22:07:15.33 ID:ePD34LgC

Advent Calendar催促おばさんが面白い

387 デフォルトの名無しさん
2017/12/23(土) 23:15:34.86 ID:nlPzuvyg

380
runAppの処理を別のモジュールやアプリに組み込みたいとき、名前がmainだと困る、とか

388 デフォルトの名無しさん
2017/12/23(土) 23:54:48.18 ID:UP/Zv3hx

382
楽かどうかという視点ならば、前後に入れるだけなら、
その手間は runApp 関数の中に入れるのと同程度ではないか?

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


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

389 デフォルトの名無しさん
2017/12/24(日) 02:26:59.79 ID:0qLezeKt

378
社員が総出でtwitterで開発が上手くいかなかったから詐欺にされたって
デマ流しまくっているじゃん

390 デフォルトの名無しさん
2017/12/24(日) 07:27:03.02

最近毛の壁みないな

391 デフォルトの名無しさん
2017/12/24(日) 13:10:48.98 ID:L0WbVZsM

壁毛ならマ板にスレあるよ

392 デフォルトの名無しさん
2017/12/25(月) 01:09:51.28 ID:KmZOPanU

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

393 デフォルトの名無しさん
2017/12/25(月) 01:12:38.31 ID:KmZOPanU

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

394 デフォルトの名無しさん
2017/12/25(月) 05:14:44.74 ID:/fea/C1E

haskellバージョンのイメージわかないけど
haskellシェルは何がどう便利になるというの?

395 デフォルトの名無しさん
2017/12/25(月) 12:02:29.99 ID:EPafu7oO

pythonの真似だから便利さもpythonと同じになる計画なんだろ
同じにならなかったら、計画通りに行動しなかった奴が戦犯で、計画立てた奴は無罪

396 デフォルトの名無しさん
2017/12/25(月) 12:28:50.13 ID:F9gRwc9o

Haskellシェルだとhsshとかになるん?

397 デフォルトの名無しさん
2017/12/26(火) 01:06:43.66 ID:ntWKYT9z

シェルスクリプトを使えばいいと思う
なぜコマンドの実行にHaskellを使う必要があるのか

398 デフォルトの名無しさん
2017/12/26(火) 11:29:24.52 ID:zQBvuC0m

まあconfigureスクリプトにはm4とかいうプリプロセッサがあるから意外と難しいよな

399 デフォルトの名無しさん
2017/12/29(金) 04:23:00.56 ID:PWPZaOro

EzoeがいつHaskellに飽きて堂々とディスり始めるのか楽しみ

400 デフォルトの名無しさん
2017/12/29(金) 05:30:43.56 ID:dUewwmlf

ガチC++erから見たHaskellというのに少し興味が湧いている

401 デフォルトの名無しさん
2017/12/29(金) 05:56:52.00 ID:xARFptR0

仕様壊れてるC++に慣らされきった人間にHaskellの厳格さの価値がわかるのかねぇ
静的型不要論的な妄言吐きそう

402 デフォルトの名無しさん
2017/12/29(金) 13:11:23.08

江添っぽさがふんだんに盛り込まれていてよい

403 デフォルトの名無しさん
2018/01/01(月) 12:12:22.18 ID:bFOlOWpA

この人は本当にプログラム書けるのかと不安になることがあるよな。
はっきり言ってc++普及に関しては逆効果をあげてるとしか思えん。

404 デフォルトの名無しさん
2018/01/01(月) 16:00:21.64 ID:pGnY0Ifz

芸人だと思って見てるわ

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

老害の見本

406 デフォルトの名無しさん
2018/01/01(月) 16:44:34.98 ID:QrIEjumd

ローカルマシンにある jenkins において、haskell コードのビルドに stack を使いたいのですが、
その際に環境変数として HOME が設定されていないと使えません。

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

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

407 デフォルトの名無しさん
2018/01/01(月) 18:03:12.68 ID:TBixhmIP

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

408 デフォルトの名無しさん
2018/01/02(火) 00:37:55.48 ID:hQQ1WWOS

C#しか知らない大学生なんだが関数型を理解したいんだが何すれば

409 デフォルトの名無しさん
2018/01/02(火) 01:13:22.41 ID:wAfZ+SpV

H本を読む

410 デフォルトの名無しさん
2018/01/02(火) 01:16:32.50 ID:hQQ1WWOS

F#と比べてどれがいい?

411 デフォルトの名無しさん
2018/01/02(火) 01:21:41.45 ID:wAfZ+SpV

は?勉強目的なら言語名でググって検索件数が多いやつのほうが解決策見つけやすいだろHaskell一択だろぉ

412 デフォルトの名無しさん
2018/01/02(火) 01:44:03.46 ID:9JghhVFB

まずHの練習からしたほうがいい

413 デフォルトの名無しさん
2018/01/02(火) 01:59:58.11 ID:hQQ1WWOS

411
そうなんですか

414 デフォルトの名無しさん
2018/01/02(火) 02:11:04.88 ID:bfdSjs8c

F#もいいけどまずはHaskellの純粋さに感動してからの方が良いよ

415 デフォルトの名無しさん
2018/01/02(火) 08:11:19.29 ID:hHAEZ1EB

言語仕様はもちろんとして純粋関数型のデータ構造やアルゴリズムも合わせて学習しないと手詰まりになる

416 デフォルトの名無しさん
2018/01/02(火) 13:53:49.75 ID:2m2cwFbr

状態マシンでなく関数合成に持ち込む為の定番手法,
例えばiteratee?とかの知識も知りたい。

417 デフォルトの名無しさん
2018/01/03(水) 00:36:59.01 ID:Mw/JDaoF

なぜ関数プログラミングは重要か
http://www.sampou.org/haskell/article/whyfp.html

418 デフォルトの名無しさん
2018/01/03(水) 00:53:21.23 ID:EBTl2OcL

関数型脳を鍛えるにはHaskellがよい

419 デフォルトの名無しさん
2018/01/03(水) 01:24:32.28 ID:wPBJzesv

プラグマとかシンタックスシュガーのオプションがやたらあって、
古い構文がデフォルトでなくなったり、いまだに安定してないイメージが強い

420 デフォルトの名無しさん
2018/01/03(水) 03:21:56.48 ID:Mw/JDaoF

安定してるプログラミング言語ってあんの?

421 デフォルトの名無しさん
2018/01/03(水) 04:47:00.22 ID:JH/i0Zss

拡張の数は標準の安定性と関係ないし非推奨になった構文も知る限り2,3個程度しかないし言うほど安定してなくはないと思うよ
主要な拡張の破壊的変更も多ければ不安定だがそこは知らん

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

422 デフォルトの名無しさん
2018/01/03(水) 10:58:30.19 ID:HUvqSveQ

420
そらLispよ

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

枯れ

424 デフォルトの名無しさん
2018/01/03(水) 19:39:52.12 ID:JH/i0Zss

そういや使用安定してるからで極地でCLが使われてたな

425 デフォルトの名無しさん
2018/01/03(水) 19:43:20.34 ID:3L8KTbvi

x86アセンブラ、めっちゃ枯れてますよ。

426 デフォルトの名無しさん
2018/01/04(木) 01:39:52.22 ID:T+TxDQDt

https://i.imgur.com/uOo7sWV.gif

427 デフォルトの名無しさん
2018/01/05(金) 10:31:44.65 ID:HcxYMAOQ

407
アドバイスありがとうございました。
参考にします。

428 デフォルトの名無しさん
2018/01/06(土) 13:51:16.58 ID:JNGs0wZB

再帰ってわかりにくくないですか?
実際によく使われているんですか?

429 デフォルトの名無しさん
2018/01/06(土) 14:01:05.48 ID:NNbzWCOQ

扱うデータ構造が再帰的なら(連結リストとか木とか)
アルゴリズムも再帰の方が自然

430 デフォルトの名無しさん
2018/01/06(土) 14:28:29.03

初見だと脳のワーキングメモリをオーバーフローして拒絶反応を示すけど
慣れたら問題先送りにしちゃって尚且つ最後には解決しちゃう魔法みたいで気持ちいいよ

431 デフォルトの名無しさん
2018/01/06(土) 14:36:45.23 ID:knmVGZUA

ループより再帰が好きだけどスタック気にしたりわざわざ末尾再帰にしなきゃいけなかったりするのは割とめんどい

432 デフォルトの名無しさん
2018/01/06(土) 17:33:04.10 ID:CqdhyGHO

breakとcontinueとreturnとthrowは関数ではない
関数ではないものを見るとマクロを書きたがるのがLisp
Haskellはマクロを使わない技術が発達したからなんでも関数を使う

433 デフォルトの名無しさん
2018/01/06(土) 18:38:34.20 ID:ttApPSmY

HaskellはCのプリプロセッサ(俗に言うマクロ)を使えるのでは

434 デフォルトの名無しさん
2018/01/06(土) 22:41:09.20 ID:dYI3l1P4

エラーの原因を教えて下さい
https://ideone.com/yGg3zM#stdin

435 デフォルトの名無しさん
2018/01/06(土) 23:19:28.76 ID:knmVGZUA

434
はい
https://ideone.com/0gDEIW

436 デフォルトの名無しさん
2018/01/06(土) 23:31:44.70 ID:ttApPSmY

エラーの原因を教えてほしいという奴にエラーの原因を教えないのがHaskellerか
また同様のエラーが出てもこのスレにくればコード書き直してやるよっていう優しさか

437 デフォルトの名無しさん
2018/01/07(日) 00:03:32.13 ID:CSD5n8Vo

ハスケラーならコードで会話できるだろ?

438 デフォルトの名無しさん
2018/01/07(日) 00:18:57.89 ID:gMArQtmD

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

ボウヤは『windows10 haskell stack build error』でググるとかはしたのかい?

440 デフォルトの名無しさん
2018/01/07(日) 00:50:52.73

飢える者に魚を与えても一日しか救えない
釣りを教えれば一生救えるやもしれぬ
してみれば、435は魚を与えたのじゃ

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

賢者乙

442 デフォルトの名無しさん
2018/01/07(日) 01:20:55.91 ID:gMArQtmD

434
435
条件ミスってて全部otherwiseに行ってたのも直したらちゃんと動きました
ありがとうございます

443 デフォルトの名無しさん
2018/01/07(日) 08:44:45.58 ID:zleJ4q+h

438
Windowsで動かないパッケージ使ってるとか?

444 デフォルトの名無しさん
2018/01/07(日) 18:07:55.57 ID:HpBedZUr

428
好き嫌いというか、ループはループ中で変数を操作するから値を返せるのであって、変数を言語から排除すれば自然にループも排除されるんじゃないの?

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

445 デフォルトの名無しさん
2018/01/07(日) 20:35:35.56 ID:gMArQtmD

438 の原因はプロジェクトのパスに日本語が含まれているからでした...orz

446 デフォルトの名無しさん
2018/01/07(日) 21:17:59.03

悲しいかな

447 デフォルトの名無しさん
2018/01/08(月) 01:26:04.04 ID:LRSoqKZx

haskellプログラミングできたンゴ
https://i.imgur.com/rzM37pq.png

448 デフォルトの名無しさん
2018/01/08(月) 01:40:46.80 ID:6LQHZKeL

挿入ソートか やるじゃん

449 デフォルトの名無しさん
2018/01/08(月) 02:31:15.01 ID:oivpkpFd

447
toBarの仕事はもっと少なくした方がいいよー
ソートとかは既存関数で手抜きしたけど、参考までに
https://ideone.com/fGFOEl

450 デフォルトの名無しさん
2018/01/08(月) 10:11:27.13 ID:ai+lPEJ3

stack の使い方について質問です。

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

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

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

cmd-exe をビルドしないで cmd-test のみをビルドする方法、
そして cmd-test を実行しないでビルドのみを行う方法はあるでしょうか。

451 デフォルトの名無しさん
2018/01/08(月) 12:02:33.14 ID:ai+lPEJ3

450
実行しないでビルドだけ行うのは --no-run-tests オプションを付けることで実現できましたが、
それでもまだ cmd-exe の方も同時にビルドされてしまいます。

452 デフォルトの名無しさん
2018/01/08(月) 13:58:59.98

Haskell、その学習に多大な苦労を強いる割に遅過ぎないですかね
http://benchmarksgame.alioth.debian.org/u64q/haskell.html

453 デフォルトの名無しさん
2018/01/08(月) 14:07:49.41 ID:jbPveYoe

普通の言語のできない数学者がプログラミングできるようにするための言語だ
彼らにはたやすい

454 デフォルトの名無しさん
2018/01/08(月) 14:17:08.35 ID:LRSoqKZx

速さよりもバグの少なさが長点なのでは...

455 デフォルトの名無しさん
2018/01/08(月) 15:59:26.22 ID:eAAAEsR7

デフォルト遅延評価に破壊的更新超苦手とかいうパフォーマンス的には冗談みたいな存在なのに
静的型付コンパイルというだけでVMアンチ勢から謎の期待を向けられる言語Haskell

456 デフォルトの名無しさん
2018/01/08(月) 16:35:37.59 ID:puck2ipT

この先haskellで良いGUIフレームワークって出ると思う?

457 デフォルトの名無しさん
2018/01/08(月) 16:52:31.19 ID:ai+lPEJ3

456
現行のGUIフレームワークの問題点は何でしょうか?

458 デフォルトの名無しさん
2018/01/08(月) 16:54:40.06 ID:edhbuhXG

汎用かつネイティブの作法に従うものがいいなぁ。

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

452

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

460 デフォルトの名無しさん
2018/01/08(月) 22:56:46.89 ID:LRSoqKZx

おまえらってIDE何使ってるの?

461 デフォルトの名無しさん
2018/01/09(火) 07:52:35.28 ID:jdJt8oqE

459
>Haskellは遅延評価なので、リストを返す関数だからといって中間データとしてのリストを必ず作成する訳ではありませんから、
>結果を即座にfromListで書き込めば実質的に配列を出力する事が可能です。
ほんとぉ?
もう融合変換なんていらんやん

462 デフォルトの名無しさん
2018/01/09(火) 11:11:12.53 ID:4pyxMvRN

中間データが不要(融合変換が不要とは言ってない)

463 デフォルトの名無しさん
2018/01/09(火) 11:23:20.89 ID:jdJt8oqE

せやな
リストのfold/buildやな

464 デフォルトの名無しさん
2018/01/09(火) 13:28:03.42 ID:4pyxMvRN

まあグラフ簡約がなかったらどうなるか実験した方がいいと思う

465 デフォルトの名無しさん
2018/01/09(火) 22:16:54.64 ID:zX7pY+gm

455
遅延評価=遅いって考える理由は?

466 デフォルトの名無しさん
2018/01/09(火) 22:55:36.65 ID:0kb7P5He

465
ほとんどの場合サンクを作るのは無駄だし最適化にも不利

467 デフォルトの名無しさん
2018/01/10(水) 00:53:00.88

haskellのコンパイルエラーメッセージが難解すぎる

468 デフォルトの名無しさん
2018/01/10(水) 00:56:33.80

どうすれば直るか教えて下さい。
https://ideone.com/VhTqZE

469 デフォルトの名無しさん
2018/01/10(水) 01:23:11.48 ID:2r/l0e/u

468
問題があるのは10行目 return (shuffle (i - 1) flipped)
これの型は実際には、IO (IO [Int]) だが期待されているのは IO [Int] だ。
IO(などのモナド) に包むために使われる return はここでは不要。外すと IO [Int] になってコンパイル通る。

470 デフォルトの名無しさん
2018/01/10(水) 01:29:37.26 ID:2r/l0e/u

460
> おまえらってIDE何使ってるの?
73 あたりで同じ質問があった。VSCode, spacemacs が人気

471 デフォルトの名無しさん
2018/01/10(水) 01:29:51.07

なるほど!

472 デフォルトの名無しさん
2018/01/10(水) 18:04:01.49 ID:CldIXwzW

455
この話をすると決まってStrict拡張を持ち出してくるのが痛いHaskellerの特徴だな
じゃあ最初から遅延評価なんかすんじゃねえよ

473 デフォルトの名無しさん
2018/01/10(水) 20:08:59.81 ID:YX2ZZ0s/

パフォーマンス的にはC/C++が王道だから素直にFFIを持ち出すのが王道
C/C++とFFIを無視するのは某言語の痛い特徴だよ

474 デフォルトの名無しさん
2018/01/10(水) 21:51:06.06 ID:CldIXwzW

久々にHaskellで簡単なプログラム書いたんだけど
構造体使うだけでStateモナドもlensも必要になるあたりやっぱ欠陥言語だなこれ
最初から言語機能にいれとけや

475 デフォルトの名無しさん
2018/01/10(水) 22:51:06.88

bindは1つの引数しかできないんですか?
アプリカティブスタイルを使わないと無理ですか?
https://qiita.com/7shi/items/85afd7bbd5d6c4115ad6

476 デフォルトの名無しさん
2018/01/11(木) 00:40:52.51 ID:vZTNKaQ4

466
その理屈だと遅延評価しない方は更に遅いじゃん。

477 デフォルトの名無しさん
2018/01/11(木) 11:20:18.33 ID:OitKCfql

欠陥のない言語があるならぜひ知りたいなあ

478 デフォルトの名無しさん
2018/01/11(木) 11:34:32.09 ID:yR+nWLrx

クラスより構造体
メソッドよりフィールドが必要という常識を取り戻すだけで十年単位の時間がかかる

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

476


480 デフォルトの名無しさん
2018/01/11(木) 16:32:20.02 ID:+cHMvoU8

haskellでできることは他の言語だと難しくて
他の言語だと簡単なことはhaskellだと難しいという

481 デフォルトの名無しさん
2018/01/11(木) 23:26:54.83 ID:CSSFSU7v

480
変態言語やん

482 デフォルトの名無しさん
2018/01/11(木) 23:57:27.46 ID:kh3sTkz1

それ、褒め言葉やで

483 デフォルトの名無しさん
2018/01/12(金) 01:48:25.78 ID:GmCW/u04

スクリプト言語を許容できてHaskellをその性能から許容できないというのは理解できない感覚

484 デフォルトの名無しさん
2018/01/12(金) 11:48:37.84 ID:xeu4OQ73

感覚ではなく統計の取り方がそうなってるんだな
シェルスクリプトなんてプログラムのコンパイル時と起動前に実行するやつだから
起動するまで何分待たされてもベンチマークには関係ないから

485 デフォルトの名無しさん
2018/01/14(日) 11:36:12.66 ID:OihlBKK7

型推論まわりを雰囲気で使っていました。
初等的なケースではそれでも問題なかったんですけど、
OVERLAPS とか type family とか出てきてから付いていけなくなりました。

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

486 デフォルトの名無しさん
2018/01/14(日) 23:23:09.38 ID:ppap/O0M

性能からって話はないな。
主にファイルIOやネットワークIOの気軽さの問題だと思うけど。

487 デフォルトの名無しさん
2018/01/14(日) 23:30:08.22 ID:fSoR9A9v

初心者だから適当だけどそこら辺はバンバンFFI使えばいいんじゃないのとか思ってしまう
そういうもんでもないのか

488 デフォルトの名無しさん
2018/01/14(日) 23:51:01.69 ID:Qz3+ZXNT

485
つ https://teratail.com/

489 デフォルトの名無しさん
2018/01/15(月) 00:04:51.86 ID:bAToeOxa

Stream Fusionの御利益を受けるには、
vectorパッケージでmapとかfoldみたいなので書けるところはすべて書いていく、
という方針でおけ?

490 デフォルトの名無しさん
2018/01/15(月) 00:57:56.87 ID:NOFCncFl

488 そのサイト、人いないような… とりあえずありがとうです。

491 デフォルトの名無しさん
2018/01/15(月) 08:59:07.15 ID:Duolqkdz

485
本質的にはこれと同じかな
https://ideone.com/hIoLnD
undefinedは()にもなれるから失敗してるみたい?

492 デフォルトの名無しさん
2018/01/15(月) 18:46:49.75 ID:v1U8cihy

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

485
横レスですが
(Hoo b ~ HooBar)
(b ~ Bar)
これのチルダってどういう意味なんですか(当方初心者です・・・)

494 デフォルトの名無しさん
2018/01/19(金) 00:29:15.30 ID:ZfC+YGVh

haskell普及させたい言うわりには初心者に優しくない

495 デフォルトの名無しさん
2018/01/19(金) 00:41:33.13 ID:bqrf+XbL

どちらかというと初心者から中級者になるまでのミッシングリンクが上手く埋められてない
H本の次のレベルにふさわしいものがないと言ったほうがいいか

496 デフォルトの名無しさん
2018/01/19(金) 00:53:08.18 ID:ZfC+YGVh

それhaskell以外の言語でもだいたいそうじゃね?

497 485
2018/01/19(金) 01:45:02.15 ID:uCK/Ej3G

皆様ありがとうございました。勉強しました。

型推論の全体を概観する為に、以下の記事がわかりやすかったです。
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

元の "> 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

495
リスト本読め

500 デフォルトの名無しさん
2018/01/19(金) 15:11:02.24 ID:uCK/Ej3G

450
stack で指定したターゲット以外の余計なものがビルドされてしまう問題は、バグの可能性があります。
https://github.com/commercialhaskell/stack/issues/1406

501 デフォルトの名無しさん
2018/01/20(土) 08:32:17.48 ID:lXdHdJ+E

Haskellの型コンストラクタがいまいち理解できなかったけど、ラムダキューブでやっと理解できた。
ポリモーフィックな関数と所謂依存型とセットなんだね。

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

502 デフォルトの名無しさん
2018/01/20(土) 09:37:30.01 ID:/5XEeDZf

494
何となく学習じゃあ、解決したい問題領域が曖昧なままだからな、何やっても難しく感じるよ。

503 デフォルトの名無しさん
2018/01/20(土) 16:49:26.40 ID:I7uywYWL

もし依存型があったらリストの長さにより異なる型を使うね
でも遅延評価はリストの長さが有限でも無限でも同じ型にする
相性悪そう

504 493
2018/01/20(土) 18:46:54.97 ID:oxqYKpr1

498
ありがとうございます

505 デフォルトの名無しさん
2018/01/24(水) 05:27:57.73 ID:/4CMqd4L

hieとVSCode使ってるんだが、ドキュメントや入力候補が「読み込んでます」ってなって一向に読み込まれないんだが
お前らは問題なく使えてるの?っていうかどんな環境でやってる?

506 デフォルトの名無しさん
2018/01/24(水) 06:36:24.95 ID:EfrrCAID

https://csacademy.com/code/ofIwdZBg/

くだらない

507 デフォルトの名無しさん
2018/01/24(水) 18:54:42.65 ID:A4/TKZVr

csacademyってコード貼り付けサイトして定着してんの?

508 デフォルトの名無しさん
2018/01/27(土) 12:07:53.22 ID:3P02pcTc

Haskellの良いところは宣言的であることです。
宣言的であるということはCSSのように素人には使いこなせないということです。
素人には使いこなせなくすることでウェブデザイナーという奇妙な職業が生まれました。
同様にHaskellもハスケラーという新たな職業を生み出す可能性があります。

509 デフォルトの名無しさん
2018/01/27(土) 17:18:06.19 ID:Y4G+sRnH

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

510 デフォルトの名無しさん
2018/01/27(土) 17:19:06.86 ID:Y4G+sRnH

509
PHPと比べてもしょうがないな…Javaあたりに読み替えといてください

511 デフォルトの名無しさん
2018/01/27(土) 19:16:11.49 ID:S0om7f3c

> コードの質の下限が他の言語より高いなとは思う

133

512 デフォルトの名無しさん
2018/01/31(水) 04:05:44.40 ID:hDoqvddW

入門書
入門書
入門書
 :
Haskell 中級書出して

513 デフォルトの名無しさん
2018/01/31(水) 04:10:45.92 ID:hCnyArbk

Effective Haskell ください

514 デフォルトの名無しさん
2018/01/31(水) 07:45:42.81 ID:jydCvtlX

Haskell Wikibooksとか中上級くらいでないの?

515 デフォルトの名無しさん
2018/01/31(水) 18:11:04.78 ID:F9QE8ZcE

「プログラミングHaskell」(Graham Hutton (著),‎ 山本 和彦 (翻訳))
って入門者向け?

516 デフォルトの名無しさん
2018/01/31(水) 18:19:54.71 ID:6Wa3kgEE

515
入門者向けには難しい
入門書を読み終えた初心者には物足りない
そんな本

517 デフォルトの名無しさん
2018/02/01(木) 08:00:02.87 ID:Xuh9WGFR

ghci で
> let x :: (a ~ Int) => a;x = undefined
として実際の型をみると
> :t x
x :: Int
に変わっている。これはどういう仕組みによるもの?

518 デフォルトの名無しさん
2018/02/02(金) 14:28:38.64 ID:iEY/rJwQ

引数が Show a だったらTrue, 違ったら False を返す関数
isShow :: a -> Bool
は可能ですか?

519 デフォルトの名無しさん
2018/02/02(金) 20:19:41.59 ID:NSR+boPa

Haskell外部ライブラリの型をShowクラスのインスタンスにしてデバッグを楽にする
http://blog.kzfmix.com/entry/1349904819

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

型に対して後から型クラスのインスタンス宣言を自動導出するには - Qiita
https://qiita.com/hyone/items/a47b905936e55147fe59

520 デフォルトの名無しさん
2018/02/02(金) 20:45:14.24 ID:PIo4kucW

https://wiki.haskell.org/GHC/AdvancedOverlap
これは自前でインスタンスの一覧作ってる

521 デフォルトの名無しさん
2018/02/03(土) 00:14:03.29 ID:st4XedSX

このコード中に 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

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

すみません、
Huttonの「プログラミングHaskell」で
学習をしているのですが
練習問題の解答が
著者や役者のサイト等を見ても見当たらなく
もし掲載のページを知ってたら教えて下さい。

524 デフォルトの名無しさん
2018/02/04(日) 04:24:30.53 ID:fRCSu2fr

プログラミングHaskell 訳者によるサポートページ
http://www.mew.org/~kazu/doc/book/haskell.html
> 練習問題の答は、原著者のサポートページにあります。

525 523
2018/02/04(日) 12:22:57.81 ID:VtcsF5YK

524
すみません。
原著者のサポートページでは回答例を見つける事ができませんでした。
翻訳されていないの新版には回答例が掲載されているようですね。

526 デフォルトの名無しさん
2018/02/04(日) 14:14:55.60 ID:+WAJGnPT

コード例とかならここにあるみたいだけど
http://www.cs.nott.ac.uk/~pszgmh/book-old.html

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

524 526

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

528 デフォルトの名無しさん
2018/02/22(木) 01:33:31.18 ID:rShSr6qS

class Hoo a
x :: Hoo a => a -> a
y :: (Hoo a => a) -> a
x = undefined
y = undefined
-- f :: a -> a
-- f a = x a -- コンパイル通らない
g :: a -> a
g a = y a -- コンパイル通る。なんでだ
-- h = y :: a -> a -- 通らない

529 526
2018/02/23(金) 11:53:44.22 ID:QhNOj82G

ghcを8.0.2 から 8.2.2に上げた。
h = y :: a -> a -- 通るようになった

530 デフォルトの名無しさん
2018/03/05(月) 00:25:18.18 ID:rygpwPFq

このコンテストに参加してるHaskellerたったの6人と少ないのでチミたちも参加したまえ

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

531 デフォルトの名無しさん
2018/03/08(木) 07:40:29.03 ID:NOpOgpfl

emacsでSymbols function definition is void: haskell-debug
てエラー文が出ちゃうんですが、原因わかる人いませんか、、
正確にはspacemacsのinteroです、、

532 デフォルトの名無しさん
2018/03/12(月) 03:18:18.08 ID:IKn+w3cq

tanakhがイキリー田中って呼ばれているみたいだけどイキリーってどういう意味?

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


Hideyuki Tanaka
@tanakh
最近ずっと国会で、国会じゃなくて裁判所でやるようなことばっかりやってないすか。もう逆に裁判所で政策議論した方が三権分立的にいいんじゃないすか(適当)
午前0:06 · 2018年3月10日
https://twitter.com/tanakh/status/972126503352676352

533 デフォルトの名無しさん
2018/03/12(月) 03:22:34.32 ID:IdW8RVi3

裁判所でもこんなあほなことやらん

534 デフォルトの名無しさん
2018/03/12(月) 06:27:09.63 ID:uoSNo/WD

スレチの相手するなバカ

535 デフォルトの名無しさん
2018/03/12(月) 07:14:31.89 ID:IKn+w3cq

Haskellで一番売れている本の訳者様だぞ

536 デフォルトの名無しさん
2018/03/12(月) 11:28:56.92 ID:67958OQ2

著者じゃなく訳者程度ってのをよく示しているのでは

537 デフォルトの名無しさん
2018/03/12(月) 12:35:28.53 ID:jLS1yZxx

売上データを証拠として提出する発想が裁判所だな
裁判の真似事をやってるのは統計学者だ

538 デフォルトの名無しさん
2018/03/12(月) 12:37:27.36 ID:Z6lm3+Nm

過疎を理由にスレチを正当化してはいけない

539 デフォルトの名無しさん
2018/03/12(月) 17:16:39.91

最近毛の壁みないな

540 デフォルトの名無しさん
2018/04/03(火) 13:16:07.09 ID:CL00mLmV

モナドの中での条件分岐ってはどうやればいいでしょうか

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

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

541 デフォルトの名無しさん
2018/04/03(火) 13:25:16.21 ID:CL00mLmV

自己解決しました
普通にif使えるんですね

542 デフォルトの名無しさん
2018/04/03(火) 16:36:19.17 ID:bMx8P0pN

遅延評価って面白いね
ぱっと見挙動がわかりにくいのと使い所がみつけづらいのが難点だけど

543 デフォルトの名無しさん
2018/04/03(火) 20:15:57.85 ID:BMbwb1La

https://twitter.com/fujiy0/status/980831517973688325

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

544 デフォルトの名無しさん
2018/04/13(金) 01:52:39.63 ID:UkwKelSp

purescriptをめっちゃ強化してクロスコンパイル&ネイティブコンパイル&jsコンパイル&wasmコンパイル可能でさらにビルド速度とGC性能をocaml並に出来ませんか😱

545 デフォルトの名無しさん
2018/04/17(火) 11:35:04.71 ID:qNbsUSYn

もし自作の型が Generic クラスのインスタンスなら、
その型を Num クラスのインスタンスにするのは容易でボイラープレートを書くだけだ、
という話を聞いたのですが、どういうことでしょうか。

546 デフォルトの名無しさん
2018/04/17(火) 15:15:39.87 ID:xGORc44D

Genericは代数的データ型の代数的構造に対して型クラスを使えるようにする仕組みという感じだから
例えば自然数の型クラスがあったらdata Nat = Zero | Succ Natっぽい型をインスタンスにできる(ようにできる)
data List a = Nil | Cons (List a)とかもList a=Natでいけそうだけど詳しいことは知らない
でNumは整数の型クラスだから符号情報を持たせた自然数っぽい型で考えればいいと思う

547 デフォルトの名無しさん
2018/04/18(水) 21:28:14.85 ID:BYjTZdeC

FRPのBehaviorとEventの構成ってなんか恣意的なのかなって印象で手付かずだったけど、
型がそれぞれ関数と直積で、カリーハワード考えるとForAllとExistsですよて説明見たら、
何に効いてくるのかまだよく分からんけど、真面目にやろうかなと思った。

548 デフォルトの名無しさん
2018/04/20(金) 15:57:50.03 ID:0HOWAbgI

Yesod のオライリー本ってまだ翻訳されてないの

549 デフォルトの名無しさん
2018/04/20(金) 19:31:13.34 ID:wBOVlPyY

print "日本語"
で日本語を表示するにはどうしたらいいですか?

550 デフォルトの名無しさん
2018/04/20(金) 20:11:46.72 ID:kdAO2jaP

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

できないんですね
わかりました

552 デフォルトの名無しさん
2018/04/20(金) 21:00:49.10 ID:0HOWAbgI

できますよ

553 デフォルトの名無しさん
2018/04/26(木) 12:38:49.74 ID:X3BRJjDS

公開したくない自作データ型を引数に持つ自作関数をhspecでテストする方法を探しています。

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

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

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

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

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

g (D b i) = 何か

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

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

他に何か良い方法はあるでしょうか。

554 デフォルトの名無しさん
2018/04/26(木) 22:19:07.30 ID:XXRDrUvo

553
ふたつめの選択肢が定番の解決策っぽい。Internalディレクトリに実装をまとめといて上層でre-export。
https://disarli.me/blog/haskell/testing/2017/08/21/testing-non-exported-functions-with-haskell.html

555 デフォルトの名無しさん
2018/04/27(金) 07:51:16.88 ID:5zUTZf4m

554
アドバイスありがとうございます。

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

検討してみます。

556 デフォルトの名無しさん
2018/04/28(土) 17:38:12.45 ID:fw0WMpkgm

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

557 デフォルトの名無しさん
2018/05/03(木) 01:36:32.06 ID:kRKy+vnx

ようやくwin10 wslでghcが遅かった件直った感じかな

558 デフォルトの名無しさん
2018/05/04(金) 07:55:06.89 ID:losdahgV

http://neilmitchell.blogspot.jp/2018/04/dont-fear-monad-t-shirts.html?m=1
外国人のこういうセンス好き

559 デフォルトの名無しさん
2018/05/04(金) 08:58:01.41 ID:eKrFMwvm

日本人の「モナド萌え~」Tシャツはないの?

560 デフォルトの名無しさん
2018/05/06(日) 09:54:40.96 ID:KRn6cuFA

モナまでは可愛いが、油断してるとドがついて怖い感じ。

561 デフォルトの名無しさん
2018/05/06(日) 10:12:01.34 ID:KRn6cuFA

Reflexやってる人います?Stackと親和的じゃないから結局諦めちゃった。

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

562 デフォルトの名無しさん
2018/05/09(水) 03:57:47.41 ID:yAd9yFdW

558
三拍子揃っててだめだった

563 デフォルトの名無しさん
2018/05/16(水) 06:39:11.37 ID:KuTIShdq

intellijにhaskellいれようとしてたらいくらやってもだめだったの
よーくみたらWindow Defenderがじゃましてた
はらたつー

564 デフォルトの名無しさん
2018/05/16(水) 14:15:35.67 ID:86oQSZWQ

MS「永続性はウイルス」

565 デフォルトの名無しさん
2018/05/20(日) 16:01:44.58 ID:h2BQfP5S

random パッケージの System.Random モジュールの split 関数は、
新しい RandomGen クラスのインスタンスをなぜ2つも生成するのでしょうか。

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

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

566 デフォルトの名無しさん
2018/05/20(日) 17:35:56.32 ID:FfB1JAMU

そもそもnextだってgetValとnextGenに分けてもいいけどね
まあ基本的には設計とか効率の問題なんじゃない?
それに戻り値が一つのsplitは引数の方がそのままもう一回splitされないように注意する必要があるし

567 デフォルトの名無しさん
2018/05/23(水) 19:45:00.92 ID:Au5e7VGg

僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

P0GWF

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

567

569 デフォルトの名無しさん
2018/05/25(金) 21:11:33.96 ID:cptzVN/K

エスパー来る

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

570 デフォルトの名無しさん
2018/05/26(土) 04:33:44.12 ID:d8ZkW1Ij

GHCのインストール先の変え方教えて
ちなWindows
Cドライブに入れたくない

571 デフォルトの名無しさん
2018/05/26(土) 04:40:40.86 ID:d8ZkW1Ij

Stackのコンフィグをイジる?

572 デフォルトの名無しさん
2018/05/31(木) 00:34:57.11 ID:zA1zBE3e

haskellの練習してる初心者なんですが2進数の文字列表現を10進数の整数に変換する処理ってこんな感じで大丈夫でしょうか? https://csacademy.com/code/CsGalG5X/

573 デフォルトの名無しさん
2018/05/31(木) 01:09:51.63 ID:CXLwfWM5

単に数値にしてるだけであって、10進数に変換して表示してるのはprintさんでしょ?

574 デフォルトの名無しさん
2018/05/31(木) 08:07:17.08 ID:Dl0sFDMW

Showが忖度したのであってInteger大臣が文字列化を指示したわけではない

575 デフォルトの名無しさん
2018/06/01(金) 00:33:16.96 ID:vzHrz6jW

10進数への変換も自前で実装しろって話の流れ?

576 デフォルトの名無しさん
2018/06/01(金) 01:50:05.31 ID:0E17r036

572が何を目指すのかによる。

577 デフォルトの名無しさん
2018/06/05(火) 20:09:41.67 ID:pRSj0ubW

どうでもいいけど、それぞれのGHC言語拡張の名前で単数形と複数形の違いがいまいち分からん。
うろ覚えで複数形で書いてコンパイルエラーになったり。

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

578 デフォルトの名無しさん
2018/06/06(水) 07:44:03.32 ID:azXcBu8b

使った中じゃ英語で説明するのに複数形が使われるであろうものなら
大体複数形だったと思うけど
カタカナ語のノリでやってるから割と間違う

579 デフォルトの名無しさん
2018/06/13(水) 21:49:00.45 ID:i4vh63zU

すごいH本に煽られるとまじでムカつくんだけど

580 デフォルトの名無しさん
2018/06/17(日) 22:53:19.15 ID:kUxbeqDh

すごいHだから勃起botをリツイートしてるのか

581 デフォルトの名無しさん
2018/06/18(月) 09:11:06.80 ID:QNagypIW

おい!あの岡部健(毛の壁)がgithubで活動を再開してるぞ!

582 デフォルトの名無しさん
2018/06/18(月) 18:39:20.54 ID:MmynirXE

IT芸人が新作コンテンツ提供開始か

583
2018/06/18(月) 20:51:53.97 ID:OiAJbwiy

581
本当ですか!ぜひお会いしたい!

584 デフォルトの名無しさん
2018/06/27(水) 12:31:39.52 ID:+XG/5Wm3

今時コンパイルとか流行らないよ
サクッと書けても実行までが面倒だと普及しない
もっと標準ライブラリをヘビィにしてPython化するしか生き残りの道はない

585 デフォルトの名無しさん
2018/06/27(水) 14:44:28.75 ID:rnjnLILH

同意だ。Turtle使ってシェバンにstackコマンドライン書いて、
Haskellでシェルスクリプトするというのがあったが正気の沙汰とは思えない。

586 デフォルトの名無しさん
2018/06/27(水) 19:48:00.92 ID:luhHLeJ1

むしろ今はコンパイル全盛期でしょ
rubyとか下火だし

587 デフォルトの名無しさん
2018/06/27(水) 22:56:56.37 ID:kWgGKFVN

どれだけ簡潔に記述出来ても
短いプログラムでは実行するまでの手間の割合が大きくなるから
pythonでいいやってなる

588 デフォルトの名無しさん
2018/06/28(木) 05:41:11.51 ID:F07eHa3U

対話環境使わんの?短いプログラムてのがどんな状況か知らんからなんとも。

589 デフォルトの名無しさん
2018/06/28(木) 07:28:52.90 ID:BPlVOF4a

Haskellで簡潔に書けるという特殊能力を持っておきながら
破壊的で動的型付けな言語を選ばなければいけないという悲劇

590 デフォルトの名無しさん
2018/06/28(木) 15:27:57.03 ID:5C2saF7L

なんで宗教みたいに二者択一になるの
要所要所で使い分ければいいだけでしょ

591 デフォルトの名無しさん
2018/06/28(木) 16:47:06.64 ID:aKd05JxM

たかだか数秒のことで簡潔さを失いたいとは思わないね

592 デフォルトの名無しさん
2018/06/28(木) 16:57:33.76 ID:rY43/kt0

バンパターンとかseqとか使いまくるからあんま簡潔に書けないわ

593 デフォルトの名無しさん
2018/06/28(木) 17:36:24.62 ID:kdV1Odt0

簡単なプログラムだと
このifでこれとこれ書き換えてさらにネストしたifでこれとこれを書き換えて
とかやっちゃうな
haskellでもStateモナドとか使えばいいんだろうけど

594 デフォルトの名無しさん
2018/06/28(木) 18:02:30.70 ID:rjCVmVg9

文字列を直接操作したければ動的型でいい
直接操作することなくShowとReadで処理できるならHaskellの型は無駄ではない

595 デフォルトの名無しさん
2018/06/28(木) 20:20:52.20 ID:8bPXL4i4

より真理に近い言語以外使いたくないのだ

596 デフォルトの名無しさん
2018/06/28(木) 20:47:06.63 ID:5C2saF7L

込み入った評価戦略で脳ミソ使わされるのが真理とも思えんがw

597 デフォルトの名無しさん
2018/06/28(木) 20:59:45.19 ID:rY43/kt0

量子コンピュータが実用化されればへーきへーき

598 デフォルトの名無しさん
2018/06/28(木) 22:01:03.00 ID:GLp7lVXW

文字列入力を要求してその文字列を含むファイルを検索して見つかったらエディタで開く、
的な、コマンドラインからさっと使いたいので実行までが重いと困るけど、
cabalプロジェクトにする程のもんでもない規模のやつ

599 デフォルトの名無しさん
2018/06/28(木) 22:04:23.65 ID:GLp7lVXW

if ってあんま使ったことない。関数のガードとcase、あとData.Bool.bool

600 デフォルトの名無しさん
2018/06/29(金) 18:53:31.79

Yesodって失敗したの?

601 デフォルトの名無しさん
2018/07/02(月) 22:40:55.64 ID:Q8zb4uVa

Haskellは"関数型だから"コードが短く生産性が高いと聞いたのに
関数型ではないPythonの方がコードが短く書けると知った時の絶望感

602 デフォルトの名無しさん
2018/07/02(月) 22:42:40.97 ID:zz3F/ohp

そうなのか?

603 デフォルトの名無しさん
2018/07/03(火) 12:03:15.48 ID:j/SH2c2P

関数型ではないHaskellがあるってことだろ
男の娘みたいなやつが

604 デフォルトの名無しさん
2018/07/03(火) 12:11:44.26 ID:jJAl/nPq

関数型こそ邪悪なシンタックスに頼らない無敵の流派なのだ
ただし両方使う方が強い

605 デフォルトの名無しさん
2018/07/03(火) 12:22:05.97 ID:vylnwloM

最強はF#で決まりがこのスレの結論です

606 デフォルトの名無しさん
2018/07/03(火) 15:28:26.92 ID:RDWAs26/0

バグバグしてていいならpythonの方が手っ取り早いでしょ

607 デフォルトの名無しさん
2018/07/03(火) 19:37:38.72 ID:h6TZWOAm

そのバグが出ない haskell で、まともなグラフ描けるライブラリ作ってくれよ

608 デフォルトの名無しさん
2018/07/03(火) 20:25:29.91 ID:k4izv0NM

そういう考え方の人はpythonの方がいいでしょ
住み分け住み分け

609 デフォルトの名無しさん
2018/07/03(火) 20:42:26.69 ID:kQlTmain

607
hackage にアップされているグラフ描画ライブラリの
まともではない点とその理由を列挙していただけないでしょうか。

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

610 デフォルトの名無しさん
2018/07/03(火) 22:20:48.11 ID:UwUpR5rd

609
Haskell は調べかかってあきらめたからよく知らないんだが、Python ユーザの視点で書かせてくれ。

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

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

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

611 デフォルトの名無しさん
2018/07/04(水) 03:12:38.67 ID:kJrFfDeb0

じゃあグラフ描くならPythonってことでいいんじゃないですかね

612 デフォルトの名無しさん
2018/07/04(水) 03:48:39.08 ID:y2B7jfXw

すいません。ハマってしまってます。助けてください。
GHC 7.8.3です。
有理数係数の複素数の計算をしようとして
import Data.Ratio
import Data.Complex
として
Prelude Data.Ratio Data.Complex> ((0%1):+(1%1))^2
としたら

: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

610
matplotlibやpandasあたりは、
そのためだけに、Python使うくらいのライブラリだから、
他の言語に使いたいライブラリがあれば、
その言語を使うで使い分けで良いんじゃない。
Excelの読み書きもなんかもPython使ってるよ。

614 デフォルトの名無しさん
2018/07/04(水) 07:58:03.61 ID:RQ3++Y83

HaskellのシンタックスのPythonが欲しい

615 デフォルトの名無しさん
2018/07/04(水) 09:21:13.05 ID:NlExtjkH

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

615
ありがとうございます。
Ratio a 割り算できるのに駄目なんですね。
別法考えます。

617 デフォルトの名無しさん
2018/07/04(水) 11:21:15.35 ID:rsOJUgV3

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

gnuplot も悪いとまでは言わないが、昔の解像度が低く色数もあまりなかった時代に最適化されてる気がするんだよ
Python のグラフと、微妙に用途が違うのかもしれないが

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

619 デフォルトの名無しさん
2018/07/04(水) 16:23:51.06 ID:rsOJUgV3

618
すいません、違いがよくまかりません。

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

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

620 デフォルトの名無しさん
2018/07/04(水) 19:14:51.99 ID:J/c/gMh10

会社のプレゼンに使うならPythonの例の方がオシャレに見える
しかしオシャレなグラフというのは見栄え以外の面では役に立たない

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

MY6

622 デフォルトの名無しさん
2018/07/05(木) 02:06:23.28 ID:4KPVS4+Q

その無駄に思えるオシャレが大事なんだぜ

623 デフォルトの名無しさん
2018/07/05(木) 06:27:20.02 ID:fgqUaerO

Pythonの例として上げられてるのは、seabornという
1. Rからデザインと
2. 人気のあるデータ表示方法
をパクって、同じことをmatplotlib.pyplotを裏で使ってお手軽にできるようにしたパッケージであって、
素のmatplotlib.pyplotのグラフはgnuplotのデフォルトと変わりのない見た目ですよ

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

624 デフォルトの名無しさん
2018/07/05(木) 09:04:27.74 ID:HeNpkv8u

623
gnuplot でお手軽に綺麗に表示できるようになってるの?

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

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

625 デフォルトの名無しさん
2018/07/05(木) 12:35:27.07 ID:aP+h4Ji7

624
綺麗にできるかどうかは使用者のセンスに依ると思います。
python の方のサンプルは、単に淡い色を使い、
線を太めに表示しているだけに見えますが、違いますか?
他に python のグラフならではの特徴があれば言ってください。

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

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

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

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

626 デフォルトの名無しさん
2018/07/05(木) 18:25:11.62 ID:rB4OVQ4f

一見丁寧に見えてなかなかに辛辣でワロた。

627 デフォルトの名無しさん
2018/07/05(木) 18:32:51.78 ID:Ia+ptacm

そんなところ頑張りたくないからデフォルトで一般受けする図を出せる奴が欲しいってだけの議論でなんでこんな白熱するんだ

628 デフォルトの名無しさん
2018/07/05(木) 18:54:20.69 ID:rB4OVQ4f

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
&nbsp; where
&nbsp; &nbsp; result :: [(a, b)]
&nbsp; &nbsp; result = zip as bs



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

630 デフォルトの名無しさん
2018/07/05(木) 21:16:31.45 ID:aP+h4Ji7

勘違いしているようですが、python 視点とかはどうでもいいです。
要は、希望されている機能がどれだけ楽に実装できるかが問題なんです。

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

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

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

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

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

631 デフォルトの名無しさん
2018/07/05(木) 21:59:46.30 ID:LtuS5J6M

普通にいける範囲なら実装してくれるってこと……?
神かよ

632 デフォルトの名無しさん
2018/07/05(木) 22:39:32.46 ID:JLdZJLqI

Pythonならでは、って訳じゃないが(むしろ Rのパクリだと思うが)
facet とかいうグラフを二次元の表に並べたオシャレなグラフは欲しい
軸はグラフ毎に共通にできたりバラバラにできたりする
seaborn の facetgrid ってクラス見てくれ、map でグラフ書いたりしてて、ちょっと関数型言語の影響がありそうだから

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

633 デフォルトの名無しさん
2018/07/05(木) 23:17:35.48 ID:mFkifadT

> Haskellならではの良さ
フーム

634 デフォルトの名無しさん
2018/07/05(木) 23:22:55.84 ID:aP+h4Ji7

632
複数のグラフを並べるのは、gnuplot では、このサンプルの一番下のものですね。
http://gnuplot.sourceforge.net/demo_5.0/layout.html

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

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

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

635 デフォルトの名無しさん
2018/07/06(金) 00:29:48.55 ID:qcgYo1MM

それはいけない。
現にSeaborneはおしゃれに仕上げて来ているので、Pythonならライブラリに期待できるのにHaskellでは期待出来ないということになってしまう

636 デフォルトの名無しさん
2018/07/06(金) 01:50:57.76 ID:nHf3/Uiq

635
プログラミング言語を用いてグラフを作る目的は、
データの取得、加工、整形までをサクッとプログラムしたのだから、
そのデータの全体像を捉えるための可視化も「ついでに」してしまおうというもの。

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

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

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

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

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

637 デフォルトの名無しさん
2018/07/06(金) 02:04:10.34 ID:qcgYo1MM

636
そういう考えなら降りた方が良いと思うよ

638 デフォルトの名無しさん
2018/07/06(金) 05:21:13.62

なんでオシャレにしないといけないんですか(正論)

639 デフォルトの名無しさん
2018/07/06(金) 06:38:28.09 ID:hZ+CPQ2X

自己肯定感かな
論理に自信があるなら論理だけでいいがそうでなければオシャレが必要なような気がする

640 デフォルトの名無しさん
2018/07/06(金) 06:41:34.00 ID:2hmUlp+S

何がオシャレなのかを定義して
正確に人に伝えるところからじゃないの?

641 デフォルトの名無しさん
2018/07/06(金) 07:12:51.82 ID:hZ+CPQ2X

もし定義できないならできないと伝えるのが正しい言葉なんです

642 デフォルトの名無しさん
2018/07/06(金) 07:46:50.10 ID:vkH0MZEq

ユーザーは最初から見た目を重視してんのに、ここにきていきなりオシャレは必要ないって突っ返すのは、
さすがにPythonがどうとかHaskellがどう以前にコミュニケーション不全

643 デフォルトの名無しさん
2018/07/06(金) 08:37:44.78 ID:ODtONBJi

万能なプリセットなんておれは期待してないから、
適当なのを真似るだけで全然問題ないよ
ただ別に金出してるわけでもないから、おれは好き勝手書いてるけど別に従う必要はないよ

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

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

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

644 デフォルトの名無しさん
2018/07/06(金) 10:10:20.21 ID:nHf3/Uiq

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

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

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

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

645 デフォルトの名無しさん
2018/07/06(金) 11:23:26.70

長い棒グラフを端折る為に、下端を0以外の数値にしちゃうとか、マナー違反しない限りもう好きにやってくれ

646 デフォルトの名無しさん
2018/07/06(金) 11:46:42.42 ID:aeaUac9w

オシャレって結局UXだからね
手軽に良いUXが得られる方を使うのは自然っちゃ自然なわけで

647 デフォルトの名無しさん
2018/07/06(金) 14:15:19.37 ID:hZ+CPQ2X

UXを定義できないなら予測もできない
予測できると思ってるならやっぱり定義するべき

648 デフォルトの名無しさん
2018/07/06(金) 18:44:45.57 ID:aeaUac9w

UX自体の定義は単純だよね
プロダクトによってユーザーが得る経験
良し悪しになると一意には定まらないけど良い悪いのアンケでも取って統計的有意差を得られれば良い悪いとしていいと思う

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

649 デフォルトの名無しさん
2018/07/07(土) 09:26:18.48 ID:IVdrrdB1

アンケ取って結果を発表するところまで全部がUXになるからお手上げだな
放○線を測定して数値を報道するみたいなUXだ

650 デフォルトの名無しさん
2018/07/07(土) 11:29:34.03 ID:o7Nl1O6h

出来ない出来ないと言い訳ばかりして実際出来ているPythonから目をそらす

651 デフォルトの名無しさん
2018/07/07(土) 11:58:08.73 ID:IVdrrdB1

プロシュー○「出来る…そんな言葉は使う必要がねーんだ。」

652 デフォルトの名無しさん
2018/07/07(土) 12:00:36.05

たかがグラフ一つでいつまでもスレを汚さないで
もっと本格的な話をして

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

質問

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

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

654 デフォルトの名無しさん
2018/07/07(土) 23:14:16.03 ID:CxD5piUN

653
そういう意図なら
sort $ takeWhile p xs
じゃないかな
最初に書いてある式だと、takeWhile p が引数のリストを評価しようとしたときに
sort xsの第一要素を見る必要があるのでxsをソートし終わらないと評価が進まないはず

655 デフォルトの名無しさん
2018/07/08(日) 00:09:13.07 ID:Xnl3te8c

マージソートでマージが遅延されるならhead $ sort xsはO(n)だと思う
いい感じの説明用コードが思いつかないけど
あとたぶん例のクイックソートも

656 デフォルトの名無しさん
2018/07/08(日) 00:15:59.84 ID:Xnl3te8c

あークイックソートは先頭だけでも最悪O(n^2)になったりするか

657 デフォルトの名無しさん
2018/07/08(日) 01:32:29.33 ID:fmVgo5Ue

654
オレ 653

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

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

658 デフォルトの名無しさん
2018/07/08(日) 01:40:40.69 ID:fmVgo5Ue

ふと思いついたが、比較関数に unsafePerformIO を入れて比較回数をカウントすれば分かるかも

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

お休み、お前ら

659 デフォルトの名無しさん
2018/07/08(日) 09:12:56.04 ID:fmVgo5Ue

実験したら、やっぱり評価に必要な部分しかソートされなかったよ
実験は takeWhile じゃなく take でやった

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

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

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

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

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

質問したけど、ひとりで納得してしまった、すまん

660 デフォルトの名無しさん
2018/07/08(日) 09:49:58.54 ID:ZNji3Zip

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

どんな言語だろうが全部ソートすれば O(n*log(n)) で最小値や最大値を探すのは O(n)

この n と n*log(n) の差を無視できないなら
そもそも n と 100*n の差を無視するのもダメじゃないかと思う

662 デフォルトの名無しさん
2018/07/08(日) 11:20:47.41 ID:fmVgo5Ue

660
いや、そうじゃなくてさ

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

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

そこがすげーって感動してるんだよ

663 デフォルトの名無しさん
2018/07/08(日) 11:30:44.71 ID:Xnl3te8c

まあソートなんて如何にもキャッシュ次第なアルゴリズムで
連結リストと遅延評価のO(N)が配列と正格評価のO(NlogN)に
現実的なNの範囲で勝てるのかものかどうか・・・

664 デフォルトの名無しさん
2018/07/08(日) 13:00:05.06 ID:MJ8iSrG7

まるで永久機関の話を見ているようだ

665 デフォルトの名無しさん
2018/07/08(日) 22:57:14.98 ID:wt6yCeB5

具体例や比喩で抽象度を下げるのは良い
だが「永久機関っぽいもの」の集合を作ったらむしろ抽象度が上がり収拾がつかなくなる

666 デフォルトの名無しさん
2018/07/09(月) 10:04:31.05 ID:pOD9hGUD

arrayパッケージのData.Array.(!)はO(1)ですか。

667 デフォルトの名無しさん
2018/07/11(水) 00:08:42.37 ID:l1CMhfek

Haskellの採用とユーザ満足度が向上
https://www.infoq.com/jp/news/2018/07/haskell-user-survey-2018

668 デフォルトの名無しさん
2018/07/13(金) 00:35:06.69 ID:vrIUPTb8

発展編! Haskellで「型」のポテンシャルを最大限に引き出すには?【第二言語としてのHaskell】
https://employment.en-japan.com/engineerhub/entry/2017/10/03/110000

669 デフォルトの名無しさん
2018/07/14(土) 09:44:23.46 ID:sMbeASmt

yampaムズ過ぎ

初心者用のシンプルで教育的なチュートリアルって無いの?
英語でもいいから教えて

670 デフォルトの名無しさん
2018/07/15(日) 00:11:52.51 ID:89Btz4it

677
Yampaエアプだが、このサイトが良さそうだ
http://bitterharvest.hatenablog.com/archive/category/Haskellプログラミング講座(上級編:ゲーム)

671 デフォルトの名無しさん
2018/07/15(日) 05:50:15.76 ID:uHtx5/Ti

670
申し訳ない

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

コードを書きまくって慣れろ、って感じ

672 デフォルトの名無しさん
2018/07/15(日) 08:13:24.43 ID:89Btz4it

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

667 ほらね、Haskell普及のためにはツールの拡充が必要なんだよ。
https://github.com/alanz/vscode-hie-server/pull/83
これこれこういうのを待ってた。emacs対応はよ

674 デフォルトの名無しさん
2018/07/15(日) 09:30:20.96 ID:uHtx5/Ti

672
ありがとう
両方読んでみる

675 デフォルトの名無しさん
2018/07/27(金) 11:27:32.40 ID:qBTTu3Zk

importのhidingとかqualifiedとか適当にやってるせいで、いつも収拾がつかなくなってる。

ブラックリストかホワイトリストか、asで名前付けるのはどんな時か。みんなどうしてるの?

676 デフォルトの名無しさん
2018/07/27(金) 21:52:57.03 ID:lmpcLfYu

675
私も知りたいな。

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

そして、asでつける名前にいつも悩む。

677 デフォルトの名無しさん
2018/07/29(日) 20:22:22.75 ID:tC3jGbCj

インポートリストをざっと見ることで、モジュールの役目が何となく掴めて嬉しい。たとえば
import Data.Text.Lazy
import Text.Parsec
だったら、ああなんかをパーズするんだな、と分かる。

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

だから値の明示的インポートはやめて、hidingだけに統一しようかな、と考えてる。
値がバッティングして、かつ両方使いたいならそのモジュールは qualified する。

678 デフォルトの名無しさん
2018/07/29(日) 20:25:02.63 ID:tC3jGbCj

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

https://github.com/trekhleb/javascript-algorithms/issues/119

岡部健、更新。

680 デフォルトの名無しさん
2018/08/11(土) 12:54:39.21 ID:dGCQYNDS

get programming with haskell 読み終わった。

681 デフォルトの名無しさん
2018/08/12(日) 03:22:15.33 ID:fh95vopi

680
感想は?

682 デフォルトの名無しさん
2018/08/12(日) 09:41:11.96 ID:mCQrOvpG

680
凄いハスケルより初心者向きで実用的でわかりやすい。

683 デフォルトの名無しさん
2018/08/12(日) 11:23:29.51 ID:1lJIW3H3

682
実用的というのは?
何かアプリケーションを作るの?

684 デフォルトの名無しさん
2018/08/12(日) 11:30:59.98 ID:mCQrOvpG

683
アプリケーションは作らないけれどコマンドラインのプログラムは作る。

685 デフォルトの名無しさん
2018/08/12(日) 17:25:24.07 ID:1lJIW3H3

もしかしてFRPとマルチスレッドって相性悪い?

686 デフォルトの名無しさん
2018/08/12(日) 18:12:55.83 ID:HMPSYWub

新分子設計は並列処理を酷使するだろうが
強化プラスチックが特別どうということはないだろう

687 デフォルトの名無しさん
2018/08/12(日) 18:50:22.57 ID:RPd+D2gX

686
FRPの有限要素解析?

688 デフォルトの名無しさん
2018/08/12(日) 19:11:53.89 ID:OVUWpXpl

26

689 デフォルトの名無しさん
2018/08/13(月) 06:20:04.15 ID:HYnqBmQs

いいねえ。気軽に使えるからコマンドラインは好き。
自分で使うツールを作るのが一番モチベ上がるね

690 デフォルトの名無しさん
2018/08/13(月) 14:03:54.60 ID:DTF7R3qv

Get Programming with Haskellはタイトルのとおり初心者向けの本だよ
600ページの本で400ページ超えたところでstack導入して、
あとは、簡単なコマンドラインツール、http、JSON、dbおさわりくらい
それまでは、ghci使ってhaskellの学習

691 デフォルトの名無しさん
2018/08/26(日) 22:17:17.61 ID:hKYk5Tea

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

今やすいぞ 多分半額程度

ソフトウェアシステムアーキテクチャ構築の原理 第2版
https://www.amazon.co.jp/ソフトウェアシステムアーキテクチャ構築の原理-第2版-ニック-ロザンスキ-ebook/dp/B00ZF44J0I/ref=tmm_kin_title_0?_encoding=UTF8&amp;qid=1535375513&amp;sr=1-1

693 デフォルトの名無しさん
2018/08/29(水) 13:20:47.63 ID:nTrDfIjn

691
俺は2

694 デフォルトの名無しさん
2018/09/04(火) 09:34:44.70 ID:0nZVvdsT

カリー化された関数の表記がよく分かりません。

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

add x = \y -> x + y

これでも問題ないと思います。

696 デフォルトの名無しさん
2018/09/04(火) 10:34:46.73 ID:ntR3woJY

Int -> (Int -> Int) も
Int -> Int -> Int も同じやろ

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

更に引数3つとるaddなら
add = \x -> (\y -> (\z -> x + y + z))
と同じ意味だし、haskellはデフォでそういう仕組になってるってことやろ

697 デフォルトの名無しさん
2018/09/04(火) 10:40:17.26 ID:0nZVvdsT

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

じゃあどんな型だと思うんだい?

699 デフォルトの名無しさん
2018/09/04(火) 10:48:48.98 ID:ntR3woJY

逆にそれ見たらどういう型だと思った?
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

698

add' :: Int Int -> Int

という型に見えます。

701 デフォルトの名無しさん
2018/09/04(火) 10:52:13.57 ID:0nZVvdsT

1 2

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

1 + 2

を対応させる関数に見えます。

702 デフォルトの名無しさん
2018/09/04(火) 10:54:55.24 ID:0nZVvdsT

関数を返す関数なんですから、

=

の右には数ではなく関数を書くべきです。

703 デフォルトの名無しさん
2018/09/04(火) 10:57:59.07 ID:0nZVvdsT

f x = x + 2

などの例を見て、

f ● = ■

という表記は、

f(●) = ■

という意味かと思います。

704 デフォルトの名無しさん
2018/09/04(火) 11:29:45.35 ID:ntR3woJY

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

700
じゃああなたが今勉強してるカリー化って何なんですかね?

706 デフォルトの名無しさん
2018/09/04(火) 12:05:07.87 ID:/45N32wx

**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

Haxe では関数の型は、
function sum (a:Int, b:Int) : Int

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

最後は戻り値

708 デフォルトの名無しさん
2018/09/04(火) 12:54:41.46 ID:tHCjwI0T

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

通りすがりだけど勉強になった
haskell面白そうだな

710 デフォルトの名無しさん
2018/09/04(火) 20:06:44.00 ID:f+p4hPZb

Haskellちょっといじってると楽しいけどこれで飯食うのは自分には絶対無理という確信がある

711 デフォルトの名無しさん
2018/09/04(火) 20:32:29.35 ID:kOsSso2/

Haskellで食っていきたい

712 デフォルトの名無しさん
2018/09/04(火) 21:00:34.43 ID:jmLwKshs

Haskell丼食いたい

713 デフォルトの名無しさん
2018/09/05(水) 02:13:16.34 ID:sfHxtAx4

市場を作れ

714 デフォルトの名無しさん
2018/09/05(水) 02:29:20.15 ID:XBVLJBKG

まずはHaskellの独壇場となるニッチ市場を開拓しないとな
どこかある?

715 デフォルトの名無しさん
2018/09/05(水) 02:54:04.71 ID:MYQmiXId

写像をドメイン、コドメインのみ与えて定義するのが簡単にできればちょっと優位にたてる分野はある

716 デフォルトの名無しさん
2018/09/05(水) 17:02:07.24 ID:7oDYcpPT

715
もう少し詳しく教えて

717 デフォルトの名無しさん
2018/09/05(水) 17:04:52.63 ID:7oDYcpPT

いまのHaskellには何が足らないのか。どんな分野で強みが活きるのか

718 デフォルトの名無しさん
2018/09/05(水) 20:52:06.57 ID:4jTvsEmq

haskellでddd, cqrs, esのやり方を教えろください

719 デフォルトの名無しさん
2018/09/07(金) 12:23:22.72 ID:bXCAi+24

DDDが活きてくる(と見込める)ほどの規模の案件をhaskellで組むプロジェクトって凄いな

本格的にhaskellを導入してるんだね

720 デフォルトの名無しさん
2018/09/07(金) 18:05:22.36 ID:jiol9czZ

718
cqrs haskell でググるとすぐに
https://github.com/BardurArantsson/cqrs
がヒットするが、これではダメなん?

721 デフォルトの名無しさん
2018/09/07(金) 19:04:41.60 ID:2UbG8YkS

720
DDD は Extensible Effect と Tagless final がよく合う

722 デフォルトの名無しさん
2018/09/07(金) 23:54:56.71 ID:2UbG8YkS

Haskellに欠けているのは中級者向けの書籍なのかも

723 デフォルトの名無しさん
2018/09/08(土) 00:07:42.03 ID:8HsWZyyw

コンセプトは無茶苦茶面白いのに、肝心の実装が学級的で好き放題に流動的で恐ろしく無責任だからでは

724 デフォルトの名無しさん
2018/09/08(土) 13:16:38.32 ID:kGQ5zdyq

723
そうなのか。具体的にはどのあたりが?

725 デフォルトの名無しさん
2018/09/10(月) 20:55:39.03 ID:Tuk3Smzo

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

発売されたら買おうかな

727 デフォルトの名無しさん
2018/09/11(火) 20:55:06.43 ID:GxY7LXz/

ひゃっほおおおう! ビルド通ったぜ
stackageの可能な限り全部の総計2352パッケージを含むプロジェクトのビルドがやっと通った。
もはや ghci をいったん落として stack.yaml と cabal ファイルにパッケージを追記し... などという面倒をしなくても
ただ import するだけでそれが利用可能になる。

728 デフォルトの名無しさん
2018/09/15(土) 18:42:49.12 ID:UVc1X0kV

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

714
金融で使ってる。
あと文書解析。

730 デフォルトの名無しさん
2018/09/16(日) 22:36:53.37 ID:/Gv7qrCh

すみません言語の話題から少し外れますが、

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

何か環境を弄ったり外部設定ファイルを書き換えたりして
外国のユーザー画面みたいな滑らか文字表示にする方法を
もしご存知でしたら教えて下さい。

731 デフォルトの名無しさん
2018/09/17(月) 17:50:28.07 ID:tAsBi2aZ

ポールフダックの音楽/Haskellの本が延期しまくりでつらみ
慰めに手を出してみたreact+reduxが割と面白くてjavascriptおじさんになりそう

732 デフォルトの名無しさん
2018/09/18(火) 15:50:49.67 ID:zscrEVSG

ハスケルミュージックスクールってやつ
なら無料で読めるドラフトバージョンのやつよんだけど糞つまらんよ
ほとんどがライブラリーの使い方の説明しか書いてない

733 デフォルトの名無しさん
2018/09/18(火) 23:03:29.52 ID:5HE01N22

その本です
定価で買うような本じゃなさそうですね…

734 デフォルトの名無しさん
2018/09/18(火) 23:04:16.22 ID:5HE01N22

遅れましたがありがとう。

735 デフォルトの名無しさん
2018/09/19(水) 23:56:22.00 ID:Pb0Tb1M0

木構造を表現するときの、「節」とか「葉」って、どう読みますか?

736 デフォルトの名無しさん
2018/09/20(木) 12:01:53.37 ID:7WHuQIEO

ふし
よう

737 デフォルトの名無しさん
2018/09/20(木) 12:32:11.09 ID:pCCtAD0d

735
節 Node
葉 Leaf

738 デフォルトの名無しさん
2018/09/20(木) 15:10:54.04 ID:x+bQf+aM

木をきと読むのならふし、は、
木をもくと読むのならせつ、よう
になる

739 デフォルトの名無しさん
2018/09/20(木) 19:43:33.25 ID:lFTDGMpz

未評価オブジェクトの thunk の語源って何?

740 デフォルトの名無しさん
2018/09/20(木) 20:48:30.00 ID:xkI4bT5j

thunkって?
http://higepon.hatenablog.com/entry/20071202/1196605979

741 デフォルトの名無しさん
2018/09/20(木) 21:06:35.17 ID:mjuqlfQO

thunk you

742 デフォルトの名無しさん
2018/09/20(木) 21:15:43.07 ID:Qp++lnrA

740
あんがと

743 デフォルトの名無しさん
2018/09/20(木) 22:10:00.23 ID:mC+zbID1

カリー=ハワード同型
https://ideone.com/RSvVYo

744 デフォルトの名無しさん
2018/09/20(木) 22:11:42.05 ID:92zkwrbu

733です
ありがとうございます

「き」「…」「は」で、「節」の読みを決めかねていましたが、738さんの仰るとおり、「ふし」で行くことにします

745 デフォルトの名無しさん
2018/09/20(木) 22:24:45.13 ID:92zkwrbu

すみません、733です

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

他の方々もありがとうございました

746 デフォルトの名無しさん
2018/09/20(木) 22:59:01.96 ID:O5Bw6BVk

745
グラフ理論だと、文献にもよるけど、道、路、小道、歩道とか出てきて、統一不能感。

747 デフォルトの名無しさん
2018/09/21(金) 11:17:49.00 ID:pJEikkxu

メモ化とスペースリークが本質的に同じもので、
言わば発酵と腐敗の関係の様なものだと知ったときは感動した。

748 デフォルトの名無しさん
2018/09/21(金) 16:12:03.67 ID:kcyxUCNO

例えw

749 デフォルトの名無しさん
2018/09/22(土) 03:54:02.44 ID:iTw0SS1T

746
path でええやん

750 デフォルトの名無しさん
2018/09/22(土) 05:09:30.37 ID:1NyjNSxI

749
元の英語がpath, trail, walkとか分かれてるのだが

文学なら訳し分けにくい概念は思い切って意訳することもできるが
技術用語だとそうもいかないのが難しいところ

751 デフォルトの名無しさん
2018/09/23(日) 15:45:23.97 ID:f8u3bg2b

Coerce知らなかった。newtypeを自動で剥がしてくれる便利なやつ

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

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

https://speakerdeck.com/konn/ben-dang-hasugoi-newtype

752 デフォルトの名無しさん
2018/09/30(日) 08:19:13.93 ID:0APHfRwQ

リストの要素がすべて異なる場合はTrue、
一つでも同じものがあれば False を返す関数を作りたい。

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

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

ちなみに、これは○○問題などと名前がついているのだろうか。

753 デフォルトの名無しさん
2018/09/30(日) 14:27:30.56 ID:3FJv0aaM

名前をつけるとしたらグラフ○○かな
グラフ簡約のように木をグラフに変える問題

754 デフォルトの名無しさん
2018/09/30(日) 14:28:16.49 ID:fYmelBV3

なんでソートするん?

755 デフォルトの名無しさん
2018/09/30(日) 14:56:02.92 ID:HUnS5YBa

ソートは不要だし、どの言語でもdictionary/mappingにして要素数見るだけの作業のような

756 デフォルトの名無しさん
2018/09/30(日) 15:13:03.29 ID:0APHfRwQ

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

752
それも結局 O(n log n) だよね?
これが効率的には限界?

758 デフォルトの名無しさん
2018/09/30(日) 15:21:38.02 ID:0APHfRwQ

757
アンカー間違えた。


755
それも結局 O(n log n) だよね?
これが効率的には限界?

759 デフォルトの名無しさん
2018/09/30(日) 16:45:52.09 ID:e88wFP8G

一般的に同値関係とは推移律が成り立ってる関係のことを言うので
全ての要素に対して先頭の要素と同値関係が成り立つのなら任意の要素間で同値関係が成り立つ
ちなみにソートして全探索を早く打ち切らせるテクニックのことは貪欲法という

760 デフォルトの名無しさん
2018/09/30(日) 18:14:08.21 ID:3FJv0aaM

dictionary云々はハッシュ関数で非可逆圧縮してからバケットソートするようなもの
バケットソートはO(n)

761 デフォルトの名無しさん
2018/09/30(日) 19:44:34.07 ID:0APHfRwQ

759
なるほど、推移律ね、失念してた。

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

みんなありがと。

762 デフォルトの名無しさん
2018/10/02(火) 09:56:14.61 ID:CXlZ46rN

Arch LinuxのHaskellのリポジトリが
1年間メンテされずに死んでいる状態なのを見ると
Haskellもいよいよ落ち目だなと感じる

763 デフォルトの名無しさん
2018/10/02(火) 10:46:10.19 ID:ckiYxteQ

よく知らないけど公式じゃあかんの?

764 デフォルトの名無しさん
2018/10/02(火) 11:02:45.56 ID:CXlZ46rN

そういう問題ではなく
向こうでHaskellへの関心が薄れているという事を言いたかった
メンテしていた人もHaskell離れしたかなとか想像できてしまう

765 デフォルトの名無しさん
2018/10/02(火) 19:43:32.30 ID:TcTkE961

本邦では昨年、Qiitaでのアドベントカレンダーは、HaskellがGoについで投稿数が多かった。

766 デフォルトの名無しさん
2018/10/05(金) 01:51:04.61 ID:kIWl5j53

入門記事を読んだ人が入門記事を書いての繰り返しですやん。

767 デフォルトの名無しさん
2018/10/05(金) 02:04:05.24 ID:vYMMhlcW

766
数えたがアドベントカレンダーに限ってはそういうのは10個くらいだった。
120程の記事のうちで

768 デフォルトの名無しさん
2018/10/06(土) 18:21:22.11 ID:nvkFLHfM

ネットでは大手のHaskell導入報告が続いて沸いてるとこだがお前らどんだけ情弱だよ

769 デフォルトの名無しさん
2018/10/06(土) 18:23:45.87 ID:FAIH8E2E

Haskell使ってはいけないような低学歴知恵遅れが
Haskellに興味をもってるからな

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

ヤバイことがおきる

770 デフォルトの名無しさん
2018/10/06(土) 18:45:45.19 ID:iQB6eFVs

サイモンペイトンジョーンズがFacebookいってたけどさ、
バック→Haskell
フロント→React
みたいな構成ってそんなメジャーなんやろか

771 デフォルトの名無しさん
2018/10/06(土) 20:53:46.19 ID:py9kgJld

FacebookはちょっとしたツールをHaskellで作ってますよ、位だと思ってたが…

768
> 大手のHaskell導入報告が続いて沸いてる
気づかなかった。他にはどこが?

772 デフォルトの名無しさん
2018/10/07(日) 02:27:45.21 ID:cvc83VBz

ツイ見ろ

773 デフォルトの名無しさん
2018/10/07(日) 08:23:56.85 ID:VWepfHKo

誰の?

774 デフォルトの名無しさん
2018/10/09(火) 07:56:37.24 ID:pc4ijCgO

MonadIO は抽象度が高くて万能すぎ、オーバースペックだよ。
そのせいで、関数の中で何やってるのかシグネチャからは分かりにくいし。
ということで、もっと細かく分けようぜ、という話。
https://chrispenner.ca/posts/monadio-considered-harmful

簡潔で分かりやすい。
こういうのパターンっていうのかな。

775 デフォルトの名無しさん
2018/10/09(火) 19:53:39.57 ID:ikZDMvLJ

githubを見る限りではとても盛り上がっているとは・・・
https://github.com/trending?l=haskell
相変わらず○○をHaskellで書いてみました系のプログラムばかり

776 デフォルトの名無しさん
2018/10/09(火) 22:29:07.16 ID:1168jJnj

なんてことないfizzbuzzもHaskellで書くと楽しくなっちゃうんだよな
初めてプログラムを書いたときのwkwkを思い出させてくれる、それがHaskell

777 デフォルトの名無しさん
2018/10/10(水) 00:27:00.44 ID:mnDhwBuZ

Haskellでfizzbuzzをやろうとすると「数値か文字を出力する関数ってどうやるんだ?」
みたいなところでつまづきがち

778 デフォルトの名無しさん
2018/10/10(水) 06:58:53.24 ID:h0OQje2u

774
似たようなことはpurescriptではデフォルト(だった?)

779 デフォルトの名無しさん
2018/10/10(水) 12:38:31.88 ID:Gg6vIVej

数値を文字列型にすれば良い

780 デフォルトの名無しさん
2018/10/11(木) 01:03:51.12 ID:g6Q8mWEK

HaskellでのFIzzBuzzってこんなかんじですか?

https://csacademy.com/code/e8XJJZyv/

781 デフォルトの名無しさん
2018/10/11(木) 12:44:03.11 ID:kgTYxXGo

780
そこからガードとmapを覚えると、多分こんな感じ
https://csacademy.com/code/wAIR17mO/

782 デフォルトの名無しさん
2018/10/11(木) 22:20:09.94 ID:BadrZ8Hx

結局は書く人本人が気持ちよくなる為の言語だね
パフォーマンスに優れるとかもないし

783 デフォルトの名無しさん
2018/10/12(金) 02:12:33.00 ID:C3Ny8aXI

781
あーやっぱこれだね~

784 デフォルトの名無しさん
2018/10/12(金) 07:44:29.57 ID:KfUOHFbE

遅延ストリームを扱うならHaskellは速い方だろう
fizzbuzzの規模じゃそれを採用する利点はわからないけど

785 デフォルトの名無しさん
2018/10/12(金) 08:45:23.98 ID:gMRT6HYK

むしろ最速の言語になってほしい。
「Haskellは参照透明性が保証されているために、最適化にアグレッシブになることができる。
そのため、高いコンポーザビリティによってコードは短くなるにもかかわらず、実行速度はあらゆる高級言語の中で最速である」

786 デフォルトの名無しさん
2018/10/12(金) 19:09:14.98 ID:dVwqKDFL

「Haskellは参照透明性を保証するために、最適化を犠牲にした。
そのため、高い冗長性によってコードは短くなるにもかかわらず、実行速度はあらゆる高級言語の中で鈍速である」

787 デフォルトの名無しさん
2018/10/12(金) 20:38:19.51 ID:P1gVq1Zk

purescriptってどうなん?

788 デフォルトの名無しさん
2018/10/12(金) 20:52:35.33 ID:gMRT6HYK

786
returnとpureのこと言ってんの?
returnとpureのこと言ってんのーーーーッ!!?

789 デフォルトの名無しさん
2018/10/13(土) 06:54:47.20 ID:KKBwY8Qn

コンパイラフレンドリーに記述したときの速度に概ね不満はないけどコードからパフォーマンスが予測しづらいのがね
そのコードにパフォーマンス上の問題がないか測定してみないとわからない
適切に最適化がかかるかとかスペースリークがないかとか

790 デフォルトの名無しさん
2018/10/13(土) 07:37:36.01 ID:dpKKSw3w

789
ベテランになれば実用上問題ない程度には予測できるようになるんじゃね?

俺はまだまだ修行不足だけど

791 デフォルトの名無しさん
2018/10/13(土) 10:35:05.77 ID:dM3fjinv

遅延評価だけでなくガベコレの遅さも問題視されるだろう(予測)
ガベコレやめてオブジェクトの寿命を予測できるレベルなら遅延評価も予測できそうだが

792 デフォルトの名無しさん
2018/10/13(土) 18:49:50.11 ID:hDWVpOOe

Haskellはコンパイルさえ通ればバグは滅多にないが通説になっているけど
実際に使うと想定していた100倍くらいメモリを使っていたりと
原因特定が面倒なミスは激減するという程でもないよね。

793 デフォルトの名無しさん
2018/10/13(土) 20:07:33.53 ID:H67rAYXW

メモリがないならディスクを使えばいいかもね
ファイルに保存できた方が原因特定も楽だし

794 デフォルトの名無しさん
2018/10/13(土) 20:11:57.62 ID:KKBwY8Qn

評価順序とスペースリークは他の言語にはないバグだから逆に増えてるところもある
しかも発見しづらい
サンクのサイズが一定量に収まるかとかIOの評価順序が正格かとかって静的に解析できそうな気がするができんもんかね

795 デフォルトの名無しさん
2018/10/13(土) 20:39:20.93 ID:H67rAYXW

データベース的な仕組みだとスペースリークを放置しているやつが多い
某OSのレジストリとか

796 デフォルトの名無しさん
2018/10/15(月) 21:26:01.71 ID:e5ZigS6A

Nixってなに?

797 デフォルトの名無しさん
2018/10/15(月) 22:33:00.01 ID:eL3fUBCp

くだらない質問で悪いけど質問させてほしい

Haskellでの優先順位について

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

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

1.関数適用
2.演算子
3.関数 <= 最下位の優先順位でいいの? 不確かだけど、F#ではそのような記述があった 希ガス

798 795
2018/10/16(火) 00:16:52.78 ID:J1KdR+sZ

795だけど、質問がうまくまとまってない希ガス

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

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

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

例えば、compfunc = funcA . funcB (3 + 4)があった場合、最初の関数適用にfuncAと後ろの(.)が
が選ばれない理由でもいいかも

799 デフォルトの名無しさん
2018/10/16(火) 00:29:51.00 ID:Y+LwBtWJ

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

演算子を関数としてみなすなら
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

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

800

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

うん、その場合なぜ、

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

関数適用の優先順位が高いのはいいとして、
じゃあ、どの関数から関数適用をするの?というのが、私の疑問

803 デフォルトの名無しさん
2018/10/16(火) 01:38:23.70 ID:iR5P4NYU

798
演算子と関数とは似ているように思うかもしれないがちゃんと区別したほうがいい
まず関数適用とは雑に言えば項の間の半角スペースのこと
関数とか定数とか(ただし演算子は除く)をスペースでくっつけるのが関数適用
その関数適用の結合はカッコを除いて最優先なので、特に全ての演算子に優先する
(結合の仕方は799の通り)
そして
(.) :: (b -> c) -> (a -> b) -> a -> c
は慣れないうちは紛らわしいが、単に関数を引数に取る2項演算子なので
(演算子として使う限りは)関数適用より優先順位が低い

うーんいまいちちゃんと説明しきれてないし用語の使い方もアヤシイので
誰か詳しい人頼む

804 デフォルトの名無しさん
2018/10/16(火) 01:48:57.45 ID:R77VKNPD

haskellの構文のBNFを見てみればいいんでない?

805 デフォルトの名無しさん
2018/10/16(火) 03:22:14.15 ID:q8KCyqRj

質問です。
正確には覚えてないんですが、Haskell の型宣言を省略した場合、コンパイラ、インタプリタがよきにはからってくれてなるべく適用範囲が広い型をつけてくれます。
でもそれは Top-Level ではダメって制約があったと思うんですが、この制約なんか名前ついてたとおもうんですがなんでしたっけ?
これなんの為にあるんでしょう?
これ外すための GHC のオプションがあった記憶もあるんですがわかります?
数年ぶりに Haskell つかったら昔とったハズの杵柄がボロボロに orz。

806 デフォルトの名無しさん
2018/10/16(火) 07:09:37.73 ID:t1I/4hrX

805
https://wiki.haskell.org/Monomorphism_restriction

807 デフォルトの名無しさん
2018/10/16(火) 14:35:49.92 ID:4kzhBxnD

806
あざっす&#10071;

808 デフォルトの名無しさん
2018/10/16(火) 16:03:37.14 ID:Y+LwBtWJ

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

300行近くあるコードなんですが
Haskellの書き方としてイケてない書き方あったら教えてもらえたら嬉しいです
BASIC言語風のインタプリタです

https://csacademy.com/code/4vUVk5c9/

810 795
2018/10/17(水) 09:26:31.84 ID:NmM3N1fc

なんとなくわかったというか 暫定でわかった
要するに”関数適用の優先順位は高い”なんだろうね

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

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

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

ということで、コンパイラーも理解出来そうなルールになっていそうだし、
808とも整合性が取れそうかな

811 デフォルトの名無しさん
2018/10/17(水) 09:28:42.96 ID:NmM3N1fc

808さん いろいろThx

812 デフォルトの名無しさん
2018/10/17(水) 11:49:29.63 ID:RJ0latBv

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

812
それが、関数適用とどう関係があるのか、俺には理解できない


とうとう俺もBNFを勉強するときが来たようだw
数年に1度、思い出したようにBNFがネックになるんだけどね
今まで避けてきたw

814 デフォルトの名無しさん
2018/10/17(水) 12:50:35.76 ID:DKH+Jm9W

813
どの言語をやるにしても、ちゃんとした理解には必要になるから頑張れ

815 デフォルトの名無しさん
2018/10/17(水) 14:46:13.41 ID:97sxRiiz

809
イケてるかどうかなんて個人の好き嫌いだよ。
あなたの中に、こういう感じのコードは好きだけど、こういうのは嫌いというのがあって、
その基準に照らして好きなコードになっていたら、それはあなたの中ではイケてるコード、
嫌いなコードになっていたら、あなたの中ではイケてないコードということだ。
そして、好き嫌いの基準は人それぞれ、千差万別なんだよ。
他人の好き嫌いに無理に合わせる必要はない。

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

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

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

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

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

この基準でいくと、あなたのコードはまったくイケてない。

816 デフォルトの名無しさん
2018/10/18(木) 00:55:40.72 ID:EL1XNa21

815
あざっす!勉強になりやした!精進しやす!

817 デフォルトの名無しさん
2018/10/19(金) 20:20:03.11 ID:XWoSmko3

815
そういうコードの設計センスはどうやって学んだのですか?

818 デフォルトの名無しさん
2018/10/19(金) 21:59:48.14 ID:Jw4VQ9Ey

817
大半はHaskell関係なくて、設計論の話

819 デフォルトの名無しさん
2018/10/19(金) 22:13:22.28 ID:8Ox5P+xa

テストどうすんべとか、保守どうしようとか、合成できるようにしたいとか
考えるとええんやで(こなみ)

820 デフォルトの名無しさん
2018/10/20(土) 12:25:50.44 ID:u8BRF3D8

815
+1
http://d.hatena.ne.jp/k3_kaimu/

821 デフォルトの名無しさん
2018/10/24(水) 13:56:56.60 ID:eHXbzfVY

+が正格で:が正格じゃないということの意味を教えてください。

822 デフォルトの名無しさん
2018/10/24(水) 15:31:36.63 ID:eHXbzfVY

じこかいけつしますたw

823 デフォルトの名無しさん
2018/10/30(火) 14:24:11.19 ID:pQwXzgRa

stack の lts-12.x にはなぜ Yampa パッケージがないんだろ?
11.x の頃はあったのに。

824 デフォルトの名無しさん
2018/11/02(金) 08:09:05.71 ID:QsNsn2yU

stackでhp2prettyってどうやってインストールするの?

825 デフォルトの名無しさん
2018/11/02(金) 15:49:58.24 ID:98olsR6p

824
stack install hp2pretty
でいける

826 デフォルトの名無しさん
2018/11/03(土) 07:37:57.15 ID:KyIBYeD2

825
ありがと。
ヘルプ見て、stack install == stack build --copy-bins って
カレントディレクトリのプロジェクトをビルドしてできた
実行ファイルをコピーするコマンドだと思いこんでた。

827 デフォルトの名無しさん
2018/11/07(水) 13:48:52.85 ID:VCaKs67w

以前の GHC.Stats モジュールには GCStats 型がありましたが、
GHC 8,4,1 からは廃止され、代わりに RTSStats 型および GCDetails 型になったみたいです。

そこで質問です。
以前の currentBytesUsed 関数は今で言うとどの関数に対応、あるいは近いのでしょうか。
gcdetails_live_bytes 関数でしょうか。

828 デフォルトの名無しさん
2018/11/09(金) 08:25:29.12 ID:rrSKeTdW

f :: a -> b -> c
このコロン以降の部分って、英語圏の人は何て発音してるの?

"a to b to c" で良いの? 不自然かな?

829 デフォルトの名無しさん
2018/11/09(金) 11:20:46.63 ID:DHGOZxva

英語圏のコミュニティで日本人なんだけど。。。って質問した方が早いのでは。。。

830 デフォルトの名無しさん
2018/11/09(金) 11:46:57.84 ID:z1XmYBYX

そもそも日本人はどう読むんだよ

831 デフォルトの名無しさん
2018/11/09(金) 11:47:53.76 ID:p9aTnaT/

a arrow b arrow c
call a, b, and c

832 デフォルトの名無しさん
2018/11/09(金) 12:13:53.97 ID:vhYIIJha

漫画と同じだろ
台詞は発音するが絵は発音しない
a b c以外は発音しない

833 デフォルトの名無しさん
2018/11/09(金) 15:06:42.54 ID:gCUmlTjd

エフはエーからビーからシー
って読んでるわ

834 デフォルトの名無しさん
2018/11/09(金) 19:57:17.40 ID:Rc4d95qg

830
ほんそれ

835 デフォルトの名無しさん
2018/11/09(金) 20:22:07.58 ID:rrSKeTdW

みんなありがと。

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

830
べつに日本語で読まなくてもいいと思うが。
英語でいいんじゃね?

836 デフォルトの名無しさん
2018/11/09(金) 20:43:11.08 ID:Rc4d95qg

それって、そもそも発音する場面なんてあるか?
って意味じゃ・・・

つか、無理にtoで読むとして
f::(a->b)->(a->c)
はどう読むつもりだよ

837 デフォルトの名無しさん
2018/11/09(金) 21:02:46.92 ID:XtklT8Hz

身近にハスケルの話しできる人なんかいないから発音したこと無いぜ

838 デフォルトの名無しさん
2018/11/09(金) 23:03:09.33 ID:TUe4RwSk

Haskell使って仕事してる人に聞いてみるしかないな

839 デフォルトの名無しさん
2018/11/09(金) 23:07:51.58 ID:9yt5Xmdj

836
えっと、びーと、えっと、しー

840 デフォルトの名無しさん
2018/11/09(金) 23:19:25.21 ID:ThtHVzoQ

いや~ん エッチィ

841 デフォルトの名無しさん
2018/11/10(土) 02:48:27.14 ID:A3qdJv3l

c9のhuttonとmeijerのlectureでは、huttonが a to b、meijerが
a arrow bだったと思うけど、別の呼び方しても誰もなんとも思わないよ
モデル上ではcurry化なんて考える必要ないから、数式のまま
f of a and b to c (か、f of a to, b to c)でもいい

(a->b)->(a->c)
は、a arrow b, arrow (or to), a arrow c
,は少しの間

842 デフォルトの名無しさん
2018/11/15(木) 22:01:12.82 ID:ExoyI5Rr

2つの型クラスの間に包含関係を付けるのに
MonadからApplicativeのときみたいに
一方を定義すれば自動的に他方が導出されるようにするのと、
FunctorからApplicativeのときみたいに
一方を定義してからでないと他方を定義できないようにするのと、
どっちのやり方がいいのかな

843 デフォルトの名無しさん
2018/11/15(木) 22:08:48.54 ID:349+82Of

変数に再代入できる言語に
慣れきっている者の質問なのですが

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

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

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

-- reverse $ fn 0 ints1 []

844 デフォルトの名無しさん
2018/11/15(木) 22:24:44.73 ID:jJzADtia

scanl (+) 0 [1..8] では?
素人なのでわからないけど

845 デフォルトの名無しさん
2018/11/15(木) 23:19:14.92 ID:5uoUpH2U

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

843 844
どうもありがとうございます。

驚くほど簡潔に書けるものですね!
今まで気にしなかった (++) の有用性を理解しました。
ありがとうございます。

847 デフォルトの名無しさん
2018/11/15(木) 23:58:57.35 ID:349+82Of

845
どうもありがとうございます。

驚くほど簡潔に書けるものですね!
今まで気にしなかった (++) の有用性を理解しました。
ありがとうございます。

848 デフォルトの名無しさん
2018/11/16(金) 00:12:59.47 ID:mACu1uNV

842です
いえいえ、私も初学者なので
scanl はともかく、foldl の方はどうかなと

先輩諸兄のレスを待ってください

849 デフォルトの名無しさん
2018/11/16(金) 01:31:49.81 ID:1zT7OHrw

何使ってもいいならData.Listのinitsを使って

map sum $ inits [1..8]

が楽チン。

850 デフォルトの名無しさん
2018/11/16(金) 18:07:13.25 ID:0oMzWKAu

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

正直全然読みやすくないのだが、本当に読みやすくないのか俺が手続き脳なだけなのか判断がつかない

852 デフォルトの名無しさん
2018/11/16(金) 18:56:19.39 ID:0oMzWKAu

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

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]

: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

if-then-else
で返り値の型が違う

855 デフォルトの名無しさん
2018/11/18(日) 09:57:38.99 ID:XromDw/4

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

型を合わせるだけなら
https://ideone.com/VBpsvO
もちろん実行時エラー

857 デフォルトの名無しさん
2018/11/20(火) 08:29:50.51 ID:kos1zZ3I

関数型プログラミングでログ出力ってどうやってるんですか?
例えば一つの関数で3回ログ出力したいときとか、Writerモナドだと関数内でエラーが起きたときとかうまく出力されてないですよね?

858 デフォルトの名無しさん
2018/11/20(火) 10:01:49.03 ID:jmuJusIM

flush

859 デフォルトの名無しさん
2018/11/20(火) 10:53:51.88 ID:QMY+cuul

Writerでは例外のようなものを投げることができないからもっと万能なモナドを使う
オブジェクト指向にたとえるとObject型
言語にたとえると動的型付け言語のような万能なやつが必要だ

860 デフォルトの名無しさん
2018/11/20(火) 15:05:53.63 ID:Bz9DRyU5

エラーが起きないように組めばいい

861 デフォルトの名無しさん
2018/11/20(火) 16:37:16.27 ID:kos1zZ3I

素直に副作用のある言語で組めってことですね
了解です

862 デフォルトの名無しさん
2018/11/20(火) 18:07:48.61 ID:QMY+cuul

Haskellにも副作用はある
ただ副作用を使えない制約の型が多くて型チェックが厳しいだけ

863 デフォルトの名無しさん
2018/11/20(火) 18:35:37.40 ID:kZ/DcFbd

857
そんな大それたもの作らないから使った事ないけど、ErrorTとか言うのがControl.Monad.Errorに入ってるっぽい。
何れにしても、本格的な開発するならRWHは持っておいた方が良い。

864 デフォルトの名無しさん
2018/11/20(火) 21:54:07.61 ID:tqW5qw7T

RWHの例外周りは古いからPCPH勧めないと

865 デフォルトの名無しさん
2018/11/24(土) 12:20:05.11 ID:dO0ZWwxC

haslell2010.pdfによくでてくる記号なんだけど”⊥”ってどう意味ですか?
値とか型ぽいんだけど、すごいH本とかの索引にはそんなん無いし。

https://www.haskell.org/definition/haskell2010.pdf

866 デフォルトの名無しさん
2018/11/24(土) 13:06:50.85 ID:4kdGLnPd

直交

867 863
2018/11/24(土) 13:10:25.20 ID:dO0ZWwxC

例えば、こんな書き勝たされてるんだけど

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

”⊥ otherwise”って何だろう?

868 デフォルトの名無しさん
2018/11/24(土) 13:16:55.35 ID:A/C05uoV

数学やれようざい

869 デフォルトの名無しさん
2018/11/24(土) 13:24:01.18 ID:dO0ZWwxC

ええええ 本当に直交って意味なの?

数学なら意味は分かるが(関数解析も入門とか初歩レベルなら読んだ)
プログラミング言語で直交ってどう意味?

870 デフォルトの名無しさん
2018/11/24(土) 13:28:15.64 ID:4kdGLnPd

独立

871 デフォルトの名無しさん
2018/11/24(土) 13:38:59.48 ID:tsQBCVAv

https://ja.wikipedia.org/wiki/ボトム型

872 デフォルトの名無しさん
2018/11/24(土) 13:43:43.78 ID:dO0ZWwxC

871
Thx ようやくまともな答えが

Haskellやってて面白いのが、新しい概念が増えていくのがうれしい 遅延評価とか

873 デフォルトの名無しさん
2018/11/24(土) 13:59:53.00 ID:1C+vWWG1

865
使わない値(_)や、未定義の値や型として使われてるね。
文脈から意味を汲み取るしか無い。

874 デフォルトの名無しさん
2018/11/24(土) 14:01:51.50 ID:1C+vWWG1

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


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

875 デフォルトの名無しさん
2018/11/24(土) 14:15:54.52 ID:1C+vWWG1

take undefined [] = undefined ― 入力待ち(Carl + Cで強制終了必須)
take 0 undefined = []

⊥をundefined = undefinedと定義してghci で試したとしても、プログラミングHaskellの説明と同じ動きをする。

876 デフォルトの名無しさん
2018/11/25(日) 11:21:25.73 ID:gET8Juo7

undef :: b -> a
undef ined = undef ined

これが ⊥ -> a とか () -> a とか () -> ⊥ とかになるせいで
⊥と()を区別する意味がわからなくなる
再帰禁止すれば違いがわかる

877 デフォルトの名無しさん
2018/12/03(月) 16:13:07.05

Haskell では明示的に instance 宣言しなければ、ある class の要件を充たしていることをコンパイラが認識してくれません
Go ではインターフェイスの要件を充たしていれば明示的に宣言しなくても型システムがコンパイル時に暗黙的に推論してくれるそうです(日記帳)

878 デフォルトの名無しさん
2018/12/05(水) 06:15:37.43

GitLab へ引っ越すんですって?

879 デフォルトの名無しさん
2018/12/11(火) 10:40:31.76 ID:w4wbcBCq

bsort [] = []
bsort xs = bsort' [] xs
where bsort' [] [] = []
bsort' xs [y] = y:bsort' [] xs
bsort' xs (x:y:zs) | x <= y = bsort' (y:xs) (x:zs)
bsort' xs (x:y:zs) = bsort' (x:xs) (y:zs)

バブルソートのつもり。。。
バブルと言うより勝ち抜きソートって感じだけど。
アルゴリズム図鑑アプリで動作見ながら、リストは頭からだから交換はコストかかるんでこんな形になった。

880 デフォルトの名無しさん
2018/12/11(火) 10:48:30.82 ID:w4wbcBCq

動作はこんな感じ。
bsort [3,5,2,4,1]
= bsort' [] [3,5,2,4,1]
= bsort' [5] [3,2,4,1]
= bsort' [3,5] [2,4,1]
= bsort' [4,3,5] [2,1]
= bsort' [2,4,3,5] [1]
= 1:bsort' [] [2,4,3,5]
= 1:bsort [4] [2,3,5]
= 1:bsort' [3,4] [2,5]
= 1:bsort' [5,3,4] [2]
= 1:2:bsort' [] [5,3,4]
= 1:2:bsort' [5] [3,4]
= 1:2:bsort' [4,5] [3]
= 1:2:3:bsort' [] [4,5]
= 1:2:3:bsort' [5] [4]
= 1:2:3:4:bsort [] [5]
= 1:2:3:4:5:bsort' [] []
= 1:2:3:4:5:[]
= [1,2,3,4,5]

最小値が一番最後の唯一つの要素になったらソート済みリストに追加して、
溜め込んだ最小値以外のリストを復帰させて残りのソートを続ける。
(ので、xsとysで見れば浮かび上がる様に見える(?)

881 デフォルトの名無しさん
2018/12/11(火) 12:12:51.51 ID:b3hhTnN8

スタックがヤバそう

882 デフォルトの名無しさん
2018/12/11(火) 13:48:28.37 ID:w4wbcBCq

[a] -> [b]な再帰関数はスタック消費しないよ。

883 デフォルトの名無しさん
2018/12/16(日) 14:26:10.12 ID:d+Ts3kFC

よりスマートに
https://gist.github.com/WhiteCat6142/a3270468cbf829200b7f66acd048b1a2

bsort=foldr bs []
where bs x []=[x]
bs x (y:ys)|x<=y =(x:y:ys)
|otherwise =(y:bs x ys)

884 デフォルトの名無しさん
2018/12/18(火) 11:44:17.44 ID:/M0/bFGF

歯透ける

885 デフォルトの名無しさん
2018/12/18(火) 12:01:03.47 ID:NUNmy+BV

パンツ透ける

886 デフォルトの名無しさん
2018/12/18(火) 14:51:09.99 ID:LIt8HoLP

882
Haskellよくわかってないんですが、
y:bsort' [] xs
の部分も末尾再帰でなくともスタック消費しないんですか?

887 デフォルトの名無しさん
2018/12/18(火) 17:19:38.38 ID:D1bDvywT

余再帰でも最適化かかる場合があるとかないとか

888 デフォルトの名無しさん
2018/12/19(水) 09:01:32.80 ID:xYxnZ8u2

最適化って言うけど最適化無しのddump-asmでもあんまりcallは使われてないんだよね
詳しくは知らないけど再帰と言えど少なくともWHNFで値を返すわけだから
サンクに入った再帰呼び出しを実際に再帰的に呼ぶ必要も無いってことだろう
つまり実際の呼び出しに評価元のスタックが使われるんだとしたら
リストを評価する場合には伸びだ分のスタックがコンスセル毎にクリアされる

889 デフォルトの名無しさん
2018/12/20(木) 07:30:09.47 ID:y4SKaDG8

https://ideone.com/r4bLq1
問題ない

890 デフォルトの名無しさん
2018/12/20(木) 21:14:07.04 ID:X0Fr2Ixv

これバブルソートじゃなくて挿入ソートだよね

891 デフォルトの名無しさん
2018/12/21(金) 00:03:36.39 ID:1VggrQKb

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

スタックマシンじゃなくてセルオートマトンだったらスタック消費しないよね

893 デフォルトの名無しさん
2018/12/22(土) 08:09:42.23 ID:9xYrH7YE

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

890
(y:bs x ys)は遅延評価だから捜査逆のバブルソート

895 デフォルトの名無しさん
2018/12/22(土) 10:39:40.85

   ミ    /、`二//-‐''"´::l|::l       l! ';!u ';/:::l ', ';::::::l ';:::::i:::::
    ニ    レ/::/ /:イ:\/l:l l::l   u   !. l / ';:::l ', ';:::::l. ';::::l:::::
     マ     レ  /:l l:::::lヽ|l l:l し      !/  ';:l,、-‐、::::l ';::::l::::
    リ       /::l l:::::l  l\l      ヽ-'  / ';!-ー 、';::ト、';::::l:::
    ス        /::::l/l::::lニ‐-、``        / /;;;;;;;;;;;;;ヽ!   i::::l:::
    ト       /i::/  l::l;;;;;ヽ \             i;;;;;;;;;;;;;;;;;;;l   l::l:::
        /:::l/:l /;;l:!;;;;;;;;;',               ';;;;;;;;;;;;;;;;;ノ    l:l::
         /::::;ィ::l. l;;;;!;;;;;;;;;;;l            `‐--‐'´.....:::::::::!l
   __|_ ヽヽ   /イ//l::l ヽ、;;;;;;;ノ....      し   :::::::::::::::::::::ヽ /!リ l
    | ー      /::::l';!::::::::::::::::::::  u               ', i ノ l
    | ヽー     /イ';::l          ’         し u.  i l  l
     |       /';:';:!,.イ   し    入               l l U
     |      /,、-'´/ し      /  ヽ、   u    し ,' ,'  l
     |        /l し     _,.ノ     `フ"       ,' ,'  ,ィ::/:
     |       /::::::ヽ       ヽ    /     し ,' ,' / l::
     |      /::::::::::::`‐、 し      ',  /    u   ,、-'´  l,、-
     |      ``‐-、._::::::::::` ‐ 、     ',/       , -'´`'´ ,-'´
     |      _,、-‐'"´';:::::::::イ:l';:::` ‐ 、._____,、-‐'"´  u /
   | | | |    \ l::/ l::::::/リ ';:::::lリ:::::l';:::l l:l:::::l\  u /
   | | | |

896 デフォルトの名無しさん
2018/12/22(土) 11:38:44.98 ID:SGb2VOwM

893
その「気持ち悪い」の方がよっぽど意味不明なんだから
divの意味が分からないくらい許してやれよ

897 デフォルトの名無しさん
2018/12/22(土) 15:07:06.49 ID:j3oO0IK0

893
気持ちわかる。import Data.Integral (div) くらいでやりたいよね。
import Prelude (Integral(div)) はどうかな

898 デフォルトの名無しさん
2018/12/23(日) 00:20:58.06 ID:OufBT+Yp

877
公称的部分型(ノミナルサブタイピング)
構造的部分型(ストラクチャルサブタイピング)

899 デフォルトの名無しさん
2018/12/23(日) 00:50:21.75 ID:2lSG181k

型推論って、いったい何を目指してるの?
コンパイラは推論できても、人間にとって読みやすいものと思えないんだけど

900 デフォルトの名無しさん
2018/12/23(日) 02:11:43.05 ID:YigQT2JG

templateって宣言してもどうせ読めないから宣言しないのを目指す

901 デフォルトの名無しさん
2018/12/23(日) 02:17:29.50 ID:zMRMmtKp

899
関数型言語だと型を考えることがプログラミングだと言うね

902 デフォルトの名無しさん
2018/12/23(日) 16:02:25.42 ID:dHWagv9n

Practical Web Development with Haskellってのがまだ70Pくらいしか読んでないけど
認証つきWebアプリをいちから写経しようぜってつくりで初~中級者にいい感じっぽい
Data.Hasとかこれで初めて知ったわ

903 デフォルトの名無しさん
2018/12/23(日) 19:07:09.70 ID:VkAdoKxx

896
気持ち悪いは言い過ぎでした。
あまりハッピーではない、くらいです。

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

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

でもアドバイスは有り難いです。
参考にさせてもらいます。

904 デフォルトの名無しさん
2018/12/23(日) 19:28:31.47 ID:14edUGfJ

Preludeなんてものは要らなくて、divはData.integralに入ってて、divを使うには毎回Data.Integralからimportするのが理想って認識で合ってる?
Preludeのその他諸々の関数も含めて

905 デフォルトの名無しさん
2018/12/23(日) 20:21:12.14 ID:YigQT2JG

LinuxにたとえるとデフォルトのGUIなんてものは要らなくて
無数のディストリビューションから選択するのが理想という認識

906 895
2018/12/23(日) 20:57:49.01 ID:gIQVihKw

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

902
Javerが4年で手本になるこなれたコードを書けてるのか疑問なんだがどんな?

908 デフォルトの名無しさん
2018/12/24(月) 18:43:23.42 ID:ovQS6rqM

うわああああこの前Amazon.comから輸入したHaskellの洋書Amazon.co.jpでも売ってたああああ
失敗した

909 デフォルトの名無しさん
2018/12/24(月) 20:36:56.95 ID:OvWyYJqn

当初から比べたらco.jpの洋書の品揃えはずいぶん充実したよね
アカウントを未だ両方持っているけど米版は使わなくなった

910 デフォルトの名無しさん
2018/12/25(火) 11:18:00.52 ID:yeWprDEr

洋書なら輸入の方が安いって話では

911 デフォルトの名無しさん
2018/12/25(火) 12:11:51.62 ID:3tfaERbL

専門書だと、各地域のamazonで送料込みでも一万円近く違ったりするから
確認はしてる。ごく稀にamazon.co.jpが破格になることもあるけど。
haskell関連だと
Computational Oriented Matroids: Equivalence Classes of Matrices within a Natural Framework
Juergen G. Bokowski
をco.jpで2800円で購入してた。他だと1万円超え。いまもco.jpでセールになって5700円で買えるみたい。
なお、haskellの学習にはなんの役にも立たないので、その分野の数学をやりたい場合だけ買ってね。

912 デフォルトの名無しさん
2018/12/25(火) 22:13:34.24 ID:S7Os6UpT

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

Haskellerって薬漬けのヤベー奴しかいねーのかよwww
http://fumieval.hatenablog.com/entry/2018/12/27/213853

914 デフォルトの名無しさん
2018/12/28(金) 21:49:01.05 ID:Wkr1Do53

なんか、Haskellなかなか理解進まない

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

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

情報系の教科書でも、Haskellの教科書でもどちらも大歓迎

915
2018/12/28(金) 21:53:15.13 ID:8AWKvvCO

913
エビリファイなんて飴玉ですよ…
私はセレネース(ハロペリドール)とベゲタミンでなんとか生きています…
https://ameblo.jp/kyupin/entry-10102907726.html
「ベゲタミンAおよびBは神の薬で、あれを思いついた人はたぶん天才だと思う。あれは合剤だから神なのであって、あの成分をバラバラに処方すると、なぜかベゲタミンほどは効かない。まぁいずれにせよ絶妙な組み合わせなのだろう。」

916 デフォルトの名無しさん
2018/12/28(金) 23:38:37.19 ID:8YrCKoD/

もともとポエマーな感じだったけどガチやん・・・

917 デフォルトの名無しさん
2018/12/28(金) 23:49:03.28 ID:6JJumxSW

914
遅延評価実装の仕組みが知りたいと?

918
2018/12/29(土) 00:32:49.36 ID:lsgoHDjS

916
これらより強力な薬はいろいろ見聞きする限りではないようですね…

919 デフォルトの名無しさん
2018/12/29(土) 02:03:55.74 ID:Btke7xay

何が目的で何がわからないかわからないとググって出てきたページ読めくらいしか言えない

920 デフォルトの名無しさん
2018/12/29(土) 05:40:28.14 ID:KKd0HoHx

この人殺人予告まがいのことしてた人じゃん

921 デフォルトの名無しさん
2018/12/29(土) 08:40:48.37 ID:+cssvHV/

913
この人、技術的にはなんか凄腕っぽくてフォローしてたけど、こんな人だったんか……(困惑)

922 デフォルトの名無しさん
2018/12/29(土) 10:05:29.13 ID:sjBWTUOw

今朝のテレビの天才特集で
西川徹でてたわ pfiのひと

923 デフォルトの名無しさん
2018/12/29(土) 11:49:29.33 ID:um1nA50l

917
うんにゃ 一番知りたいのは レスポンス周り
ちょっと、混乱中なのでうまく書けないんだけど

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

Webで得られるのは、どうしても断片的な知識になるんで、個々の知識が繋がりづらいのと、
あとはちょっと信頼性が落ちてたりする(初心者には間違いが分かりづらい)
ある程度知識がしっかりしてる人には、内容の真偽を含めそれで十分なのかもしれないけど

924
2018/12/29(土) 12:04:31.84 ID:lsgoHDjS

920
「殺人予告」と「殺人予告まがい」とは違うものですよね…

925 デフォルトの名無しさん
2018/12/29(土) 12:16:13.76 ID:UYTJL+lP

923
SICP読んだ後、言語ごとの構文解析ちゃんと調べればいいんじゃないかな

926 デフォルトの名無しさん
2018/12/29(土) 12:54:03.27 ID:EK4sWEwk

921
ほんそれ

927 デフォルトの名無しさん
2018/12/29(土) 13:00:10.35 ID:um1nA50l

>言語ごとの構文解析ちゃんと調べればいいんじゃないかな
構文解析という言葉になじみが無いんですが
Haskellの場合具体的に何をすればいいですか?
(情報系の教育は受けてないんで ただ、これからそっち系を漁ろうとはしているけど)


SICPは多分自分の好物w 読みたい候補に入れとく

928 デフォルトの名無しさん
2018/12/29(土) 13:48:17.43 ID:0jIQbIRd

形式的なのはhaskell language reportってのがあるけど
ボトム(undefinedとか)の扱いが定義されてるだけでサンクの項目は無いね
ボトムの定義としては評価してみないと区別できないってことだから
これを関数に渡してもエラーにしないって感じで評価方法が規定されてる

929 デフォルトの名無しさん
2018/12/29(土) 14:32:03.91 ID:Btke7xay

基本的な知識なしに局所的に理解しようとするからわからないんでしょ
数冊テキスト読んでるうちにたいていの疑問は消える

930 デフォルトの名無しさん
2018/12/29(土) 14:51:54.06 ID:HTMRsjvp

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

取りあえず、914の質問の回答してくれてありがとう "> 回答者

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

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

とはいえ、もうちょっと具体的な質問が出来るよう出直してきます

932 デフォルトの名無しさん
2018/12/29(土) 17:00:23.21 ID:e0g6OpD4

実践的なのはこんなの webだけど
スペースリーク、その傾向と対策 - Qiita
https://qiita.com/ruicc/items/bfa659c2ef9e1f75f7e1

933 デフォルトの名無しさん
2018/12/29(土) 17:36:10.57 ID:FOaDygsP

遅延評価は並列処理を学ぶときにちょろっと深くやるくらいな印象
Haskellにおける並列実行 - 純粋関数型魔境 http://amothic.hatenablog.jp/entry/2013/10/09/220004
『Haskellによる並列・並行プログラミング』の中で
この記事の前半部分をもうちょっと詳しく書いてるけど
それでも10ページ未満くらいの分量

934 デフォルトの名無しさん
2018/12/31(月) 00:40:09.80 ID:eNA22sUO

参照カウントを除けばGCのアルゴリズムはみんなメモリ解放を遅延しているという事実
のせいでC++のようなGC無し言語の支持率が異常に高い

935 デフォルトの名無しさん
2018/12/31(月) 11:19:16.45

GC管轄外領域にROMを作って高速に読み出す機能ができたんですって?

936 デフォルトの名無しさん
2018/12/31(月) 20:24:52.37 ID:/+DS/TZA

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

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

それです

939 デフォルトの名無しさん
2019/01/01(火) 17:19:58.78 ID:7ZW7L+dS

HRR(Haskell relational record)で遊んでるんだけど、
ポスグレのreturning○○に対応したinsert文を生成する機能てないかな?
オートインクリメントある表とかはべたにクエリ書いたほうが楽に感じてしまう

940 デフォルトの名無しさん
2019/01/05(土) 19:51:01.28 ID:iNZzFN2I

Javaでいえばルール付きインターフェイスがHaskellのモナドという理解でOK?
実装時インターフェイスよりちょっと守るべきルールと性質が多いのがモナド。
型はJavaでいえば複数のインターフェイスを継承できる感じでいいですか?

941 デフォルトの名無しさん
2019/01/05(土) 20:04:34.05 ID:KrQndHog

モナドは単なる自己関手の圏におけるモノイド対象だよ。

942 デフォルトの名無しさん
2019/01/05(土) 22:45:17.04

モナドは単なる自己関手の圏におけるモノイド対象だよおじさん「モナドは単なる自己関手の圏におけるモノイド対象だよ」

943 デフォルトの名無しさん
2019/01/06(日) 00:04:04.86 ID:13gMXODg

Javaのクラスやインターフェイスは
メソッドの定義を変えられるがメソッドの型は変わらない
例えばObjectクラスのメソッドの定義を変えてもメソッドの型が変わらないので
型チェックが甘い

Haskellのクラスはメソッドの型も変わる

944 デフォルトの名無しさん
2019/01/06(日) 09:16:44.99 ID:7U4qFACZ

943
なるほどなあ勉強不足でした。
聞いてみてよかったです。

945 デフォルトの名無しさん
2019/01/06(日) 20:47:40.51 ID:8Nv8H8lo

「where」の日本語読みに関してだけど
「左記の名前(モジュール名/クラス名/インスタンス名/関数名)が
示す物の中では以下の定義が行われています。」
て言う読み方でいいの?

英語の関係福祉 where の「~する所の」と同じ意味でいいのかどうか。

946 デフォルトの名無しさん
2019/01/06(日) 21:59:18.26 ID:RK31I1jj

右な左。

947 デフォルトの名無しさん
2019/01/07(月) 06:30:03.04 ID:Tzw/TAIJ

945
haskell の where は数学の教科書なんかに同じ使い方で普通に出てくる。
というか、haskell が数学から借りてきた。

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

f = g x where x = ...

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

みたいに読めばいい。

948 デフォルトの名無しさん
2019/01/07(月) 14:03:18.35

ん? x の定義は where?となるから先回りして where と書いてる

949 デフォルトの名無しさん
2019/01/08(火) 00:20:15.62 ID:t9mDJmjK

数学の教科書・・?

950 デフォルトの名無しさん
2019/01/08(火) 11:30:51.32 ID:GKZx39y6

SQLか

951 デフォルトの名無しさん
2019/01/08(火) 11:56:51.91 ID:ZgpKo6ms

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

フォルダの中身を列挙再帰するのって1回で1階層しか見れなくてIOモナドぶっかけられるから
1関数の中のwhereの中で回すしかない感じですかね?

953 デフォルトの名無しさん
2019/01/09(水) 06:47:34.41 ID:SOqsE/HW

数学の教科書「関数の中・・?・・スコープ・・?」

954 デフォルトの名無しさん
2019/01/09(水) 16:57:29.61

数学は無限に高速なCPU、無限に使えるメモリを前提として処理を議論する

955 デフォルトの名無しさん
2019/01/09(水) 19:12:59.65 ID:Me/cgKlM

なんだ高卒か

956 デフォルトの名無しさん
2019/01/09(水) 19:19:36.45 ID:vBKfOHsm

時間を考慮に入れないなら高速である必要すらない

957 943
2019/01/14(月) 00:22:49.99 ID:O/Nk4r6k

947 946
ありがとうございます。
コード読む時に使わせて頂きます・

958 デフォルトの名無しさん
2019/01/14(月) 01:01:35.99 ID:oPHKHfrN

944は心理か何かか?俺には理解出来んw

959 デフォルトの名無しさん
2019/01/14(月) 10:58:12.74 ID:hZswZX0S

952
質問の意味がよく分からないが、
where じゃなくても、自分自身を再帰的に呼べばいいのでは?

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

これじゃダメ?

960 デフォルトの名無しさん
2019/01/14(月) 14:48:46.72 ID:hZswZX0S

959
シグネチャを間違えた

directiries :: FilePath -> IO [FilePath]

961 デフォルトの名無しさん
2019/01/14(月) 16:11:26.66 ID:tN6VIVTj

-- ほげ :: 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

ディープラーニング用ライブラリ 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 &amp;&amp; <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

ディープラーニングにHaskellを使おうとしていることが問題

964 デフォルトの名無しさん
2019/01/15(火) 23:33:41.05 ID:fNWkI4iJ

962
">=2.2 &amp;&amp; <2.14

965 デフォルトの名無しさん
2019/01/16(水) 00:57:57.45 ID:Rf1WUy5G

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

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

cabal new-ナントカ
を日本語で解説してほしい

968 デフォルトの名無しさん
2019/01/19(土) 10:09:04.13 ID:XQ+5XzTr

963
> ディープラーニングにHaskellを使おうとしていることが問題

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

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

使った主なパッケージは、
学習用
 apecs
 apecs-physics
 grenade
確認用 (アニメーション)
 apecs
 apecs-gloss
 gloss
です。
あとは細々としたものを幾つか。

969 s2019/01/19(土) 21:02:03.11 ID:K21HdJ2L

Haskellの「->」という記号の読み方はありますか?
他のプログラミング言語だと「->」には「アロー演算子」という名前が付けられていますが、Haskellの場合は何という名前なのでしょうか?

970 デフォルトの名無しさん
2019/01/19(土) 22:34:36.32 ID:nurYb0Ef

969
型における(->)の英語での読み方は841 によると、toもしくはarrow

971 デフォルトの名無しさん
2019/01/20(日) 14:28:23.05 ID:J4e1TPCS

data T = D { f :: Int -> Int }
という型があったら、関数 f の実際の型は T -> Int -> Int だよね。

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

g :: T -> Int -> Int って型の関数を作っても、
D { f = g } なんてできないよね。
h :: Int -> Int なら D { f = h } はできる。

972 デフォルトの名無しさん
2019/01/20(日) 19:41:43.18 ID:xPUxeMcd

data D = D { f :: Int -> Int, x :: Int }
g d y = x d + y
d = D { f = g d, x = 1 }
f d 1 == 2
とか?

973 デフォルトの名無しさん
2019/01/21(月) 21:42:26.44 ID:xU0cTMEl

GHC(Haskell)の上流リポジトリ等がGitLabに移行しました 2019年01月20日
https://qiita.com/takenobu-hs/items/a2eeb327088bb1d2fe77

974 デフォルトの名無しさん
2019/01/22(火) 18:35:04.27 ID:Lbcg1DYs

972
なるほど、頭いいな。
採用させてもらうよ。
ありがとう。

975 デフォルトの名無しさん
2019/01/23(水) 00:07:49.58 ID:UhkibQh6

既出かも知れませんが
「 木 (tree) 」の読み方について質問です。

化学では「塩」をシオではなくエンと読む様に
「 木 」もモクやボクと読むのか
訓読みでキと読むのか確認したいです。

976 デフォルトの名無しさん
2019/01/23(水) 00:12:29.03 ID:e48tmJNP

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

976
了解です。
薔薇木をバラキと読むのに違和感があったので
確認してみたかったです。

978 デフォルトの名無しさん
2019/01/23(水) 00:19:35.51 ID:Ysgk2cll

その質問は既出じゃないと思う

979 デフォルトの名無しさん
2019/01/23(水) 00:27:46.89 ID:UhkibQh6

そうでしたか。

しかし良く考えてみたら
薔薇木(ばらぼく)って同性愛雑誌みたいでした。

980 デフォルトの名無しさん
2019/01/23(水) 12:32:21.82 ID:8dbvKkbn

薔薇刑 ← 読めない

981 デフォルトの名無しさん
2019/01/23(水) 15:57:01.39 ID:I7vJASel

葉は
枝えだ
木き
根ね

982 デフォルトの名無しさん
2019/01/23(水) 16:07:41.36 ID:OFN8YGgg

男根おとこね

983 デフォルトの名無しさん
2019/01/24(木) 00:53:14.43 ID:cVpDBcbd

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

擬人化してくれ

985 デフォルトの名無しさん
2019/01/24(木) 17:57:50.91

Haskell は初期学習コストが高すぎるのと、圏論イキリおじさんが煙に巻くので近寄りがたい雰囲気を醸している

986 デフォルトの名無しさん
2019/01/24(木) 18:25:57.35 ID:wii/ewut

ちょっと勉強したけど、なんか仕様がコロコロ変わってるような気がして、
本格的に手を出しにくい

987 デフォルトの名無しさん
2019/01/24(木) 18:27:39.45 ID:tqh7mtUe

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

関数従属を消すとコンパイルが通らなくなる例
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

m → r
mを決めると自動的にrも決まるという意味だろうか
いまモナドを、ReaderT r m と決めた
だからそこで使われる r が自動的にMonadReader r ~の r となるのだ

このように素人目に推測できる

990 デフォルトの名無しさん
2019/01/25(金) 08:16:02.28 ID:iIPgsGqp

985
モナド使うだけなら圏論要らんけどな。
自作するなら圏論要るけど、それはHaskellが難しいんじゃなくて圏論(とか数学)が難しいだけで。
自作しないでただのプログラミング言語として使う分には難しくない。
(どこまで抽象化できるか研究してる人が多いから難しく感じるだけ)

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

returnとかclassとか、普通の言語にも同じ用語が出るからって、同じ意味と考えないほうがいい。
まっさらな頭で挑むべし。
(そういう意味で初心者の方が理解が早い)

991 デフォルトの名無しさん
2019/01/25(金) 18:42:51.74 ID:sjWwXpoO

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

C++のtemplateのような制約がないダックタイピングに不都合を実感した者は理解が早い
初心者より早い

993 デフォルトの名無しさん
2019/01/25(金) 20:13:55.21 ID:DHFZGKPe

991
型推論において instance Monad m => MonadReader (ReaderT r m) のように扱えると言いたかっただけです
上のコードが意味することを言い換えたつもりだったんですが
言葉としては Monad m => ReaderT r m をMonadReaderのインスタンスのように扱える
とした方が正しかったですね

994 デフォルトの名無しさん
2019/01/26(土) 19:27:32.21 ID:2lj1Pdko

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

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

UndecidableInstancesだからでは?
自分も理解しきれてないけど

997 デフォルトの名無しさん
2019/01/27(日) 20:30:51.01 ID:wGWJPOk3

質問ではなく否定ができる者は理解が早い
どういうことでしょうか、ではなく、ここが間違っているのを知ってる俺は正しい
その方が圧倒的に早い

998 デフォルトの名無しさん
2019/01/28(月) 02:18:47.10 ID:UwyAz0OY

すいません。
初心者でこんなこと聞くのもお恥ずかしいんですが、なにをどうググっても情報がでてこないのでお聞きします。
いま話題になってる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

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

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

すみません質問いいですか?

1002 デフォルトの名無しさん
2019/01/28(月) 12:39:33.26 ID:MTZ0KVk9

いいよ

1003 1001
Over 1000 Thread

このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 488日 10時間 6分 25秒

1004 過去ログ ★
[過去ログ]

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

1 2 3 4 5 6 最新200 全部見る 

人気スレッド

890: 関数型プログラミング言語Haskell Part31 (547)

人気スレッド2




上位板 人気

443: くだすれPython(超初心者用) その37 (992)
68: .Net Core / Net ASP Core (980)
291: VBAなんでも質問スレ Part2 (978)
133: ふらっと C#,C♯,C#(初心者用) Part141 (978)
369: 【えっ】Perlに未来はあるのか?【終わり?】 (964)
160: 【論理】Prolog【初心者】 (960)
220: 【モダン推奨】Perlについての質問箱 50箱目 (955)
45: シェルスクリプト総合 その33 (952)
354: Pythonについて(アンチ専用) (951)
289: C++相談室 part138 (950)
16: Android Studio Part3 (945)
399: (939)
203: Windows 10 UWPアプリ開発 Part 2 (938)
197: クラス名・変数名に迷ったら書き込むスレ。Part28 (937)
481: UNIXプログラミング質問すれ Part10 (930)
90: C#で仕事ある? (923)
30: プログラマが使ってはいけないテキストエディタ (915)
475: OpenCLプログラミング#1 (899)
81: 【Delphi互換!?】FreePascal/Lazarus その2【GPL】 (889)
417: 2 part forth (888)
283: なあ、再帰関数好きな人いる? パート3 (887)
154: アセンブラ初心者スレッド 2 (886)
296: proce55ing プログラミングアート全般 (885)
36: オブジェクト指向は愚かな考え。この世は計算式 ★3 (882)
461: C#,C#の宿題片付けます。 (880)
471: 任天堂「今後C++は捨てJavaScriptで開発していく」 (879)
478: monazilla Part 6 (871)
75: 米国国防省の標準高等言語エイダ(Ada)を語れ! (867)
441: 【GUI】wxWidgets(旧wxWindows) その5【サイザー】 (866)
277: 集合論に基づいた言語を作りたい (855)
845: CVS導入スレ〜 Rev.3 (854)
272: OpenGL 2.0 専用スレ (850)
453: HTAをもっと流行らせる計画 Part2 (846)
27: Androidプログラミング質問スレ revision53 (846)
864: リファクタリングをただのコード修正と思ってる人へ (845)
429: VRプログラム雑談【Unity/UnrealEngine】【HTC Vive/Oculus Rift/その他V
477: Tapestryについて語ろうよ! (838)
935: [RPA]PC自動化技術総合スレ[効率化] Part.9 (838)
479: 動的言語で大規模開発 (832)
445: C#は糞2.0 (823)
115: WindowsDDK各種についてのスレ (819)
472: 【O3D】HTML5用 3D API WebGL 【Canvas:3D】 (816)
34: Ruby 初心者スレッド Part 66 (815)
407: VBSで便利なプログラムを作れスレ 2 (811)
56: Cygwin + MinGW + GCC 相談室 Part 8 (803)
579: pythonがこの先生きのこるには (803)
383: 【License】ライセンス総合【利用許諾】 (794)
558: 暇だから最強のメモ帳つくらね?【java】 (793)
228: Perlについて (793)
974: Vue vs React vs Angular Part.5 (791)
700: メガデモを語る fr-08 (783)
5: HSP総合スレ【part 10】 [無断転載禁止](c)2ch.net (769)
844: 【汚物】痛い変数名・関数名【破廉恥】 (768)
486: プログラミング未経験→月4万 (768)
143: delphiで作った有名ソフトって何があるの? (762)
83: Go language part 3 (755)
434: JavaScriptは消滅すべきだったよな (748)
729: 【iPhoneも】Titanium Mobileスレッド【Androidも】 (745)
44: 【MACRO】Google Apps Script 質問スレ【DRIVE】 (736)
704: ネットワークプログラミング相談室 Port30 (735)
87: Perlについての質問箱 64箱目 (734)
8: プログラミングのお題スレ Part18 (734)
809: datファイルを共有するP2Pソフト o2on 17dat (732)
737: Java Web Application Framework総合 ver2 (731)
705: 【C++】マイナーGUIツールキット (724)
709: 静的型付け言語の潜在開発生産性は今の100倍 ×5 (724)
123: 【計測】LabVIEW相談室【制御】 (722)
62: JavaScript情報交換所(プログラミング既習者専用) (719)
66: UWSC初心者用スレ (713)
3: 【入門】Common Lisp その11【質問よろず】 (711)
61: Swift part12 (710)
191: GCは失敗。メモリは自分で管理せよ! その2 (709)
14: Java入門・初心者質問スレ Part.10 (705)
510: 【JavaScript】スクリプト バトルロワイヤル55【php,py,pl,rb】 (696)
748: △△もっとStruts2の良さを教えてくださいSsssion6 (689)
693: C++でXML(主にxerces)やろう! (688)
1008: 「単体テストを手動で行いエビデンス取る」の破壊力 (684)
999: スレ立てるまでもない質問はここで 154匹目 (683)
64: MFC相談室 mfc23d.dll (680)
560: 【SICP】計算機プログラムの構造と解釈 Part3 (677)
699: Ruby>>>>>Java (670)
142: GARMIN社のGPSのプログラム (669)
46: Julia Juno Jupyter part1 (666)
171: 新言語を開発したい (664)
153: TypeScript part3 (663)
708: 【アンチ】関数型言語は使えない【玩具】 2 (662)
33: Qiita (659)
218: sizeof(char)が必ず1でも、省略すべきではない (658)
720: テストしにくいコードをテストする方法 その2 (657)
327: こんなプログラミング言語は嫌だ! (653)
589: C++/TemplateMetaProgramming (649)
78: Smalltalk総合 Squeak Pharo (649)
992: シェルスクリプト総合 その34 (649)
969: 【本命】Blazor スレ1【真打】 (646)
562: 「コンパイラ・スクリプトエンジン」相談室16 (638)
166: 俺主催囲碁プログラミングコンテスト (635)
532: C++は難しすぎ 難易度:4 (635)
308: Subversion r15 (633)
43: PowerShell -Part 4 (630)
523: バージョン管理システムについて語るスレ10 (624)
148: お前らプログラミング言語どうやって覚えたんや? (616)
877: Visual Studio IDE環境 (615)
793: 結局プログラム作るのってWinとLinuxどっちがいい? (614)
195: ***Javaのオススメ入門書*** 『創るJava』 3.0 (613)
108: ソースコード ホスティング総合【GitHub,GitLab,Bitbucket等】 (609)
851: C/C++の宿題片付けます 170代目 (607)
18: コンテナ型仮想化Dockerスレ その2 (606)
665: 今まで見た中で一番すげーコメント (605)
698: 【マック】Macintoshプログラミング質問箱 (603)
51: Android開発質問スレ (601)
595: 【コメント】doxygen【コンソメ】 (599)
594: 3Dアルゴリズム全般 (599)
865: 訃報: C 言語の開発者、デニス・リッチー氏が死去 (594)
996: Excel VBA 質問スレ Part68 (593)
20: WPF(.NET4.x, .NET Core) GUIプログラミング Part24 (590)
285: 師匠!1週間よろしくお願いするぞ! (588)
88: 【C++】 DirectX初心者質問スレ Part41 【C】 (580)
392: 国産オープンソースDIコンテナSeasar2 その16 (570)
846: BASICの宿題はお前にまかせた (562)
691: 日下部陽一著 作ってわかるCプログラミング(第6版) (560)
128: 【node.js】サーバサイドjavascript 5【Nashorn】 (559)
264: StackOverflowについて語るスレ (552)
63: 古代VBプログラマ質問スレ(Ver.6.0 まで) part65 (545)
119: VB.NET質問スレ(Part44) (544)
583: 疑似乱数2 (543)
502: Message Passing Interface (MPI) 統合スレ (543)
734: BrainFuck Part.3 (538)
701: GCCについて part10 (538)
10: 関数型プログラミング言語Haskell Part33 (528)
47: 【コボル】COBOL不要論【ただのDSLだよね?】 (519)
91: 簡単なプログラム言語って何? (515)
345: VisualBasic6.0 対 VisualBasic .NET 2003 (513)
21: 【C++】高速化手法【SSE】2 (509)
821: 【独学】一人で勉強する奴らのスレ【自習】 (507)
11: pythonista総合スレ【IOSで勉強できる】 (504)
934: ☆★Java質問・相談スレッド183★★ (496)
233: MATLABプログラミング 質問箱 その4 (489)
412: Perl初心者スレ(マジレス回答) (488)
857: COM (487)
662: 【Java】DIコンテナって本当に便利か? (484)
52: TopCoder (484)
209: NullPointerExceptionを「ぬるぽ」と呼ぶスレ6 (479)
962: カプセル化■プライベートメソッドをテストする方法 (475)
551: アセンブラ 13 (466)
55: Gtkプログラミング on Windows!!! (460)
159: ゲームプログラムなら俺に聞け33 (456)
181: 【Java標準GUIライブラリ】 JavaFX スレッド (453)
785: 【信者】C++の問題点【アンチ】 (452)
29: Regular Expression(正規表現) Part15 (452)
158: 次世代が造った言語 blawn (450)
637: Java低速GUI Swing 10 (443)
681: D言語は多分コケると思っている人の数→ (439)
318: マルチスレッドプログラミング相談室 その9 (437)
4: ●●●●TCL/TKなら俺に聞け 4●●●● (433)
459: C言語相談室(上級者専用) (432)
726: オブジェクト指向の活用方法を教えて下さい (429)
473: Google Maps API 質問箱 (399)
711: クロージャって何がいいの? (397)
72: くだらないアルゴリズムを考えるスレ (394)
89: Javaはもう死んだの? Part.2 (393)
365: 「OS自作入門」 (390)
242: 構造化プログラミングはまだ必要ではないのか? (390)
207: JavaScript 4 (386)
553: 文字コードの種類は何故複数あるのでしょうか? (384)
216: Borland C++ Compiler オ ワ タ (383)
605: スレを勃てるまでもないC/C++の質問はここで 25 [隔離病棟] (382)
294: 文字コード総合スレ Part12 (381)
482: 本当に必要ものは人工知能ではなくて検索エンジン (381)
808: Borlandにはやられた... (379)
702: 逆コンパイラCodeReverseを作る (379)
193: 【DI】Java Spring Frameworkを語るスレ 5.0 (375)
22: ねねっちと一緒にプログラムを勉強するスレ第3話 (373)
121: 【QBASIC互換!?】FreeBasic【GPL】 2 (373)
282: 懐かしのMS-DOSプログラミング ver.2 (372)
248: ExcelVBAで勤務表を作ろう (372)
393: Google App Engine for java (370)
258: NetBeans Part7 (367)
706: 0から始める2chブラウザfor超漢字 "2ch de BTRON" (367)
425: 【分散型バージョン管理】 Mercurial 2【hg】 (366)
929: Win32API質問箱 Build126 (365)
232: PHPがいかに駄目言語であるかをちゃんと説明 Part.2 (365)
533: プログラマー目指してるんだが色々と教えてくれ (361)
721: 2ちゃんねる互換P2P匿名掲示板の実装を考える 1 (360)
235: プログラマは大卒じゃないと就活厳しいってホント? (357)
545: Boost総合スレ part10 (355)
109: テスト (352)
408: GPGPU#5 (351)
990: Visual Studio 2019 Part5 (348)
940: ふらっと C#,C♯,C#(初心者用) Part148 (338)
926: 次世代言語21 Go Nim Rust Swift Kotlin TypeScript (337)
317: プログラミング始めたいんだけどどこ言語がいい? (336)
54: 将来性ないプログラミング言語。Delphi含まれず安心 (334)
120: AI AI って夢見すぎてない? (332)
35: 統計解析R たぶんpart3くらい (331)
151: 【Erlang】プログラム言語 Elixir 【BEAM】 (329)


 

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


人気スレ 上位板 ブックマ-ク見る