関数型プログラミング言語 Haskell について語るスレです。
Haskell Language(公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ - Haskell-jp
https://haskell.jp/
前スレ
関数型プログラミング言語Haskell Part32
https://mevius.5ch.net/test/read.cgi/tech/1548720347/
関数型プログラミング言語Haskell Part33
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2020/02/10(月) 18:17:36.49ID:L6eYQqyh261デフォルトの名無しさん
2020/04/25(土) 04:06:57.78 それを知るとどんな良い事があるのか、学習の動機づけをください
262デフォルトの名無しさん
2020/04/25(土) 05:14:26.69ID:n1+IBCwB 簡単に言えば、安全で明確でテストしやすいプログラムが書ける。
IOモナドの関数は中でどんなIOアクションでもできてしまい危険だ。
大事なファイルを上書きしようが、大音量でビープを鳴らそうが。
Polysemyに代表されるエフェクトシステムを使うと、
関数の中で使えるIOアクションの内容を関数シグネチャで制限できる。
ファイル読取アクションを宣言した関数の中では、書込や画像表示など他のIOアクションは一切できず安全だ。
また、ビジネスロジックのコードではどんなアクションをするのか(what)というレシピだけを書き、
そのアクションを実際のIOを使ってどの様に実現するか(how)は別のコードで書くことになる。
whatとhowがしっかり分かれ明確だ。
なので、ビジネスロジックのコードは純粋関数で書け、テストしやすくなる。
howのコードだけをモックに変えることもでき、これもまたテストを容易にする。
と言うようなことを例を交えて分かりやすく説明しているのが >>260 の記事だ。
IOモナドの関数は中でどんなIOアクションでもできてしまい危険だ。
大事なファイルを上書きしようが、大音量でビープを鳴らそうが。
Polysemyに代表されるエフェクトシステムを使うと、
関数の中で使えるIOアクションの内容を関数シグネチャで制限できる。
ファイル読取アクションを宣言した関数の中では、書込や画像表示など他のIOアクションは一切できず安全だ。
また、ビジネスロジックのコードではどんなアクションをするのか(what)というレシピだけを書き、
そのアクションを実際のIOを使ってどの様に実現するか(how)は別のコードで書くことになる。
whatとhowがしっかり分かれ明確だ。
なので、ビジネスロジックのコードは純粋関数で書け、テストしやすくなる。
howのコードだけをモックに変えることもでき、これもまたテストを容易にする。
と言うようなことを例を交えて分かりやすく説明しているのが >>260 の記事だ。
263デフォルトの名無しさん
2020/04/25(土) 08:08:07.66 目を通しました(理解できたとは言ってない)
粒度の粗い物を制限してもっと細かくして、その組み合わせで書き直すことで間違いを排除する、
(手を入れられない)既存ライブラリに対して、ぼくのかんがえたさいきょうのリファクタリングをエミュレートする基盤となるものですか?
粒度の粗い物を制限してもっと細かくして、その組み合わせで書き直すことで間違いを排除する、
(手を入れられない)既存ライブラリに対して、ぼくのかんがえたさいきょうのリファクタリングをエミュレートする基盤となるものですか?
264デフォルトの名無しさん
2020/04/25(土) 10:58:51.70ID:n1+IBCwB >>263
前半はその通り。
が、すまん、後半は意味が分からない。
リファクタリングをエミュレートするってどういう事?
初めて聞いたフレーズだ。
リファクタリングをする事と、リファクタリングをエミュレートする事の違いを教えてくれ。
前半はその通り。
が、すまん、後半は意味が分からない。
リファクタリングをエミュレートするってどういう事?
初めて聞いたフレーズだ。
リファクタリングをする事と、リファクタリングをエミュレートする事の違いを教えてくれ。
265デフォルトの名無しさん
2020/04/25(土) 12:04:03.93 真のリファクタリングは、設計しなおしてソースコードも書き直す事が含まれるとすると
標準ライブラリであるIOモナドの設計やソースコードを直接弄ることはできませんから、ポリ蝉版は本当にIOを再設計したわけではなく、
リファクタリングを疑似的に再現したという解釈はできないでしょうか
リファクタリングの真似事なのでエミュレートと言いました
標準ライブラリであるIOモナドの設計やソースコードを直接弄ることはできませんから、ポリ蝉版は本当にIOを再設計したわけではなく、
リファクタリングを疑似的に再現したという解釈はできないでしょうか
リファクタリングの真似事なのでエミュレートと言いました
266デフォルトの名無しさん
2020/04/25(土) 12:44:25.69ID:d+Khct7b 現実問題として純粋関数だけじゃ成り立たないからね
267デフォルトの名無しさん
2020/04/25(土) 13:20:46.87ID:n1+IBCwB >>265
なんか、私と貴方の間にリファクタリングという言葉に齟齬があるような・・・
今までIOモナドを直接使っていたコードをPolysemyを使うようにリファクタリングすることはできるよ。
エフェクトシステムの設計者たちはそれを推奨している。
でもそれは、IOライブラリのコードが弄れないから、仕方ないので、Polysemyで擬似的に弄ったように見せましょう、
という話では全くないよ。
なんか、私と貴方の間にリファクタリングという言葉に齟齬があるような・・・
今までIOモナドを直接使っていたコードをPolysemyを使うようにリファクタリングすることはできるよ。
エフェクトシステムの設計者たちはそれを推奨している。
でもそれは、IOライブラリのコードが弄れないから、仕方ないので、Polysemyで擬似的に弄ったように見せましょう、
という話では全くないよ。
268デフォルトの名無しさん
2020/04/25(土) 17:18:59.24ID:zjFjVVvP Polysemyってはじめてきいた
Extensible effectsとは別もの?
Extensible effectsとは別もの?
269デフォルトの名無しさん
2020/04/25(土) 18:29:06.56ID:n1+IBCwB270デフォルトの名無しさん
2020/04/26(日) 08:52:10.51ID:K9Hk9jTV IOは副作用じゃなくて作用だからハスケルは副作用が無いんだなんていってるやつ初めて見たんだけど
271デフォルトの名無しさん
2020/04/26(日) 09:58:35.47ID:igL2TSix あらかじめ宣言した型に従う作用じゃなくて
宣言していないことを勝手にやるのが副作用の弊害だから
Haskellにはこの弊害が無いんだな
宣言していないことを勝手にやるのが副作用の弊害だから
Haskellにはこの弊害が無いんだな
272デフォルトの名無しさん
2020/04/26(日) 10:22:30.54ID:FBxVgLTh273デフォルトの名無しさん
2020/04/26(日) 11:39:57.10ID:K9Hk9jTV ブログを観る限り素人の書いたクソ記事だな
読む価値なし
読む価値なし
274デフォルトの名無しさん
2020/04/26(日) 14:00:45.22ID:igL2TSix この毒舌が日本の平常運転
275デフォルトの名無しさん
2020/04/26(日) 14:32:48.40ID:jQbFLCNe Haskellの玄人って研究者とか?
276デフォルトの名無しさん
2020/04/26(日) 17:02:22.77ID:i7pDRaTP このスレ住人のことだよ
277デフォルトの名無しさん
2020/04/27(月) 14:12:58.96ID:AM55pzUu 「Prelude>:browse」の実行結果をテキストファイルにリダイレクトする方法
browse.hsという名前のファイルに:browseを記入して保存
保存したファイルのあるディレクトリでコマンドプロンプトを立ち上げて以下を実行
stack ghci < browse.hs > browse.txt
Redirecting Haskell GHCi output to text file [duplicate]
https://stackoverflow.com/questions/14688119/redirecting-haskell-ghci-output-to-text-file
browse.hsという名前のファイルに:browseを記入して保存
保存したファイルのあるディレクトリでコマンドプロンプトを立ち上げて以下を実行
stack ghci < browse.hs > browse.txt
Redirecting Haskell GHCi output to text file [duplicate]
https://stackoverflow.com/questions/14688119/redirecting-haskell-ghci-output-to-text-file
278デフォルトの名無しさん
2020/04/27(月) 17:47:14.78ID:AOepTdHn このスレで延々と副作用やモナドの話ばかりされてるのなんか既視感があると思ったら、物理学板の相対論スレでポアンカレ群やリーマン幾何の話は一切せず
モノの本で読んだようなマイケルソン・モーレイの実験の話に関する持論をひたすら展開して相対論は間違ってる!って騒いでる連中に似てる
モノの本で読んだようなマイケルソン・モーレイの実験の話に関する持論をひたすら展開して相対論は間違ってる!って騒いでる連中に似てる
279デフォルトの名無しさん
2020/04/27(月) 17:48:43.80ID:l27UEbbh 相対性理論も量子力学もどっちも間違ってる
280デフォルトの名無しさん
2020/04/27(月) 18:04:41.79ID:3bdWQ9Vo まあ副作用やモナドに関する理解の甘さは初心者にありがちだからな
281デフォルトの名無しさん
2020/04/27(月) 19:40:47.96 最新 stack で 7.8.4 をセットアップしようとしたら realgcc.exe を使おうとしてコケる
新しい GHC にはあるみたいだけど古い GHC には mingw\bin に存在しないようだ
なのに使おうとしている
なぜ古いのを入れようとしてるかというと競プロサイトのGHCが古いからだ
最新版で通るコードが向こうで弾かれたりして苛ついたから、じゃあそっちの環境で通るコードを提出してやるよとなってインストールを試みたのだ
スタックで古いバージョンのセットアップに自身ニキ、助けて
新しい GHC にはあるみたいだけど古い GHC には mingw\bin に存在しないようだ
なのに使おうとしている
なぜ古いのを入れようとしてるかというと競プロサイトのGHCが古いからだ
最新版で通るコードが向こうで弾かれたりして苛ついたから、じゃあそっちの環境で通るコードを提出してやるよとなってインストールを試みたのだ
スタックで古いバージョンのセットアップに自身ニキ、助けて
282デフォルトの名無しさん
2020/04/27(月) 21:15:06.74ID:6TeRc6dT 静的型付けの話は一切せず
実行時の振る舞いに関する持論をひたすら展開してモナドがーって
これ半分オブジェクト指向だよ
型はオブジェクトではないから型の話を一切しないんだよ
実行時の振る舞いに関する持論をひたすら展開してモナドがーって
これ半分オブジェクト指向だよ
型はオブジェクトではないから型の話を一切しないんだよ
283デフォルトの名無しさん
2020/04/27(月) 22:39:13.77 相対論スレもHaskellスレ同様に荒らされてるの?
284デフォルトの名無しさん
2020/04/28(火) 00:09:34.24ID:Bz0WEXXQ >>281
複数のバージョンを使い分けたいのなら、
Windowsは向かないと思います。
あくせくしてゴチャゴチャになるくらいなら、
さっさと仮想環境にlinux入れてそっちで環境構築した方が
楽で早いのではないでしょうか。
複数のバージョンを使い分けたいのなら、
Windowsは向かないと思います。
あくせくしてゴチャゴチャになるくらいなら、
さっさと仮想環境にlinux入れてそっちで環境構築した方が
楽で早いのではないでしょうか。
285デフォルトの名無しさん
2020/04/28(火) 00:20:49.19ID:fQrwEc0Y Haskellは何でああも副作用を嫌うの?
286デフォルトの名無しさん
2020/04/28(火) 00:24:10.18ID:6HXykM7G >>285
だから嫌ってない…
だから嫌ってない…
287デフォルトの名無しさん
2020/04/28(火) 01:57:21.75ID:zsCbc70d288デフォルトの名無しさん
2020/04/28(火) 12:53:37.93 よしわかった。ならばWSL Ubuntu を導入だ。stackをインストールし、古すぎるので最新版stackに替え、stack setup 7.8.4
The GHC located at /home/devlin/.stack/programs/x86_64-linux/ghc-7.8.4/bin/ghc-7.8.4 failed to compile a sanity check. Please see:
http://docs.haskellstack.org/en/stable/install_and_upgrade/
for more information. Exception was:
Received ExitFailure 1 when running
Raw command: /home/devlin/.stack/programs/x86_64-linux/ghc-7.8.4/bin/ghc-7.8.4 /tmp/stack-sanity-check47/Main.hs -no-user-package-db
Run from: /tmp/stack-sanity-check47/
Standard output:
[1 of 1] Compiling Main ( /tmp/stack-sanity-check47/Main.hs, /tmp/stack-sanity-check47/Main.o )
Linking /tmp/stack-sanity-check47/Main ...
Standard error:
/usr/bin/ld: -lgmp a??e|?a??a??a??a??a???
collect2: error: ld returned 1 exit status
神はどうあっても試練を与えようというあああああ!!!!
The GHC located at /home/devlin/.stack/programs/x86_64-linux/ghc-7.8.4/bin/ghc-7.8.4 failed to compile a sanity check. Please see:
http://docs.haskellstack.org/en/stable/install_and_upgrade/
for more information. Exception was:
Received ExitFailure 1 when running
Raw command: /home/devlin/.stack/programs/x86_64-linux/ghc-7.8.4/bin/ghc-7.8.4 /tmp/stack-sanity-check47/Main.hs -no-user-package-db
Run from: /tmp/stack-sanity-check47/
Standard output:
[1 of 1] Compiling Main ( /tmp/stack-sanity-check47/Main.hs, /tmp/stack-sanity-check47/Main.o )
Linking /tmp/stack-sanity-check47/Main ...
Standard error:
/usr/bin/ld: -lgmp a??e|?a??a??a??a??a???
collect2: error: ld returned 1 exit status
神はどうあっても試練を与えようというあああああ!!!!
289デフォルトの名無しさん
2020/04/28(火) 17:08:37.94ID:yBopWDZB 言語仕様はHaskellでもいいけど実装は、電池が入ってるインタプリタがいい
コンパイラをコンパイルするのも、ネットのサービス終了も嫌だ
コンパイラをコンパイルするのも、ネットのサービス終了も嫌だ
290デフォルトの名無しさん
2020/04/28(火) 22:24:50.85ID:fQrwEc0Y F#ならスクリプト使えるよー
モナドの代わりにコンピューテーション式も使えるよ
副作用も使いまくりだよー
ライブラリーは.NETつかえるよー
GUIはちょっと苦手 でも、ワンレンボディコンのボインちゃん
シャッチョサン、シャッチョサン
シャッチョさんのことだからまけにまけて0円 もってけどろぼー
モナドの代わりにコンピューテーション式も使えるよ
副作用も使いまくりだよー
ライブラリーは.NETつかえるよー
GUIはちょっと苦手 でも、ワンレンボディコンのボインちゃん
シャッチョサン、シャッチョサン
シャッチョさんのことだからまけにまけて0円 もってけどろぼー
291デフォルトの名無しさん
2020/04/28(火) 22:37:15.08ID:GL0e6TlJ よし採用
292デフォルトの名無しさん
2020/04/29(水) 06:50:08.19 Elmっているこ?いらんこ?
293デフォルトの名無しさん
2020/04/29(水) 07:13:41.98ID:SPs1sTfW 分からん
purescriptとかどうなんだろ
purescriptとかどうなんだろ
294デフォルトの名無しさん
2020/04/29(水) 09:16:57.44ID:GLX6jWJt agdaをjsにコンパイルするのはどうなの?
295デフォルトの名無しさん
2020/04/29(水) 09:36:37.62ID:TuLha3Ht F#スレ落ちてるね
296デフォルトの名無しさん
2020/04/29(水) 10:44:15.44ID:JIRjVKl2 奴は四天王の中でも最弱
297デフォルトの名無しさん
2020/04/29(水) 10:47:45.94ID:SPs1sTfW 5chごときにスレが立たないとは
魔族の面汚しよ・・・
魔族の面汚しよ・・・
298デフォルトの名無しさん
2020/04/29(水) 15:25:39.64ID:Cpi+Il5+ >>288
漏れは、Windows 10, WSL, Ubuntu 18.04 で、
Linux側には、日本人が作った、バージョンマネージャーのanyenv で、rbenv, nodenv を使って、
ruby 2.6.6, node 12.16.2 を入れた
yarn は、Windows側に入れて、WSL から、拡張子なしのyarn コマンドを呼べる。
これは、#!/bin/sh で始まるシェルスクリプト
Windows側で、VSCode の拡張機能、Remote WSLも使う
Haskell のhsenv は、使えないのか?
漏れは、Windows 10, WSL, Ubuntu 18.04 で、
Linux側には、日本人が作った、バージョンマネージャーのanyenv で、rbenv, nodenv を使って、
ruby 2.6.6, node 12.16.2 を入れた
yarn は、Windows側に入れて、WSL から、拡張子なしのyarn コマンドを呼べる。
これは、#!/bin/sh で始まるシェルスクリプト
Windows側で、VSCode の拡張機能、Remote WSLも使う
Haskell のhsenv は、使えないのか?
299298
2020/04/29(水) 15:39:17.08ID:Cpi+Il5+ ちなみに、Ruby on Rails の場合、コンパイルに必要なパッケージは、
sudo apt-get update
してから、
sudo apt install -y build-essential
build-essential には、
gcc(GNU C compiler), g++(GNU C++ compiler), libc6-dev(GNU C Library), make などが入っています
次に、openssl, readline, zlib のパッケージをインストールします。
sudo apt-get install -y libssl-dev libreadline-dev zlib1g-dev
データベースの、libsqlite3-dev, sqlite3 をインストールします。
sudo apt-get install -y libsqlite3-dev sqlite3
sudo apt-get update
してから、
sudo apt install -y build-essential
build-essential には、
gcc(GNU C compiler), g++(GNU C++ compiler), libc6-dev(GNU C Library), make などが入っています
次に、openssl, readline, zlib のパッケージをインストールします。
sudo apt-get install -y libssl-dev libreadline-dev zlib1g-dev
データベースの、libsqlite3-dev, sqlite3 をインストールします。
sudo apt-get install -y libsqlite3-dev sqlite3
300デフォルトの名無しさん
2020/04/29(水) 15:47:47.21ID:ob+X7Nc0 的はずれなのでやめて
301デフォルトの名無しさん
2020/04/29(水) 15:50:08.55ID:l6fPvkOQ -lgmpができないならlibgmp-devをインストールすればいい
302デフォルトの名無しさん
2020/04/30(木) 17:28:15.60 >>298-299
んにゃぴ・・・んまぁ、そう、よくわかんなかったです
>>300
それでようやく原因が判りました
Stack no longer supports Cabal versions below 1.19.2,
but version 1.18.1.5 was found.
This invocation will most likely fail.
To fix this, either use an older version of Stack or a newer resolver
Acceptable resolvers: lts-3.0/nightly-2015-05-05 or later
stack will use a sandboxed GHC it installed
For more information on paths, see 'stack path' and 'stack exec env'
To use this GHC and packages outside of a project, consider using:
stack ghc, stack ghci, stack runghc, or stack exec
7.8.4 のCabal は 1.18.1.5 であるんですが、最新版 stack は 1.19.2 以降のCabal しか対応しない
というわけで諦めました。いうほど 7.8.4 使いたいかって気分になってきて、エラー出たらその都度古いコードに書き直せばいいじゃんってなったんで
このイシューは閉じます。ありがとうございました。
んにゃぴ・・・んまぁ、そう、よくわかんなかったです
>>300
それでようやく原因が判りました
Stack no longer supports Cabal versions below 1.19.2,
but version 1.18.1.5 was found.
This invocation will most likely fail.
To fix this, either use an older version of Stack or a newer resolver
Acceptable resolvers: lts-3.0/nightly-2015-05-05 or later
stack will use a sandboxed GHC it installed
For more information on paths, see 'stack path' and 'stack exec env'
To use this GHC and packages outside of a project, consider using:
stack ghc, stack ghci, stack runghc, or stack exec
7.8.4 のCabal は 1.18.1.5 であるんですが、最新版 stack は 1.19.2 以降のCabal しか対応しない
というわけで諦めました。いうほど 7.8.4 使いたいかって気分になってきて、エラー出たらその都度古いコードに書き直せばいいじゃんってなったんで
このイシューは閉じます。ありがとうございました。
303デフォルトの名無しさん
2020/04/30(木) 17:28:45.70304デフォルトの名無しさん
2020/05/02(土) 07:49:02.53ID:+q7QtdZF cabalってカバルじゃなくカボールなんだな
305デフォルトの名無しさん
2020/05/02(土) 09:29:59.76ID:S0jsNVj+ haskellのライブラリ管理ツールはずっとクソ。
pythonのも大概だけど、haskellはそれを遥かに凌ぐレベルでくそ。
pythonのも大概だけど、haskellはそれを遥かに凌ぐレベルでくそ。
306デフォルトの名無しさん
2020/05/02(土) 12:12:56.17ID:2Bfib/9h そろそろocamlの時代じゃねーか?
307デフォルトの名無しさん
2020/05/02(土) 12:50:23.34ID:F6qz2woZ ライブラリ管理ツールって何をするためのモノなんだ?
ユーザーから何を期待されてるんだ?
ユーザーから何を期待されてるんだ?
308デフォルトの名無しさん
2020/05/02(土) 13:54:24.62ID:QDKxMZyf シェルスクリプトで管理ではなく
そろそろxmlとかyamlとかの時代を期待されてる説
そろそろxmlとかyamlとかの時代を期待されてる説
309デフォルトの名無しさん
2020/05/04(月) 03:20:08.08ID:tNWuxt0H 待ち遠しい「Algorithm Design withHaskell」
https://www.cambridge.org/core/books/algorithm-design-with-haskell/824BE0319E3762CE8BA5B1D91EEA3F52
https://www.cambridge.org/core/books/algorithm-design-with-haskell/824BE0319E3762CE8BA5B1D91EEA3F52
310デフォルトの名無しさん
2020/05/04(月) 16:45:39.46ID:R0S0SfqY ocamlはせっかく盛り返してたのに失言でだいなし
311デフォルトの名無しさん
2020/05/04(月) 23:50:02.51ID:Qeb7CV4E どんな失言?
312デフォルトの名無しさん
2020/05/05(火) 13:49:22.34ID:jdwgKTKz haskellにライブラリ管理ツールなんて無いよね?
313デフォルトの名無しさん
2020/05/06(水) 22:37:05.49ID:wUeYrIi1 釧路湿原
314デフォルトの名無しさん
2020/05/07(木) 10:57:00.07ID:zCrpEpjK 書籍「関数プログラミング 珠玉のアルゴリズムデザイン」で分からない所があります。
2ページ目3行目
xsに含まれない最小の数は、filter (<= n) xs に含まれない最小の数ということになる。
ここで < ではなく、<= なのは何故でしょうか。
< を使って条件を厳しくしても、
xs = [0], n = 1 ===> filter (<n) xs = [0]
[0] に含まれない最小数 = 1
xs = [1], n = 1 ===> filter (<n) xs = []
[] に含まれない最小数 = 0
このように問題無いように思えます。
2ページ目3行目
xsに含まれない最小の数は、filter (<= n) xs に含まれない最小の数ということになる。
ここで < ではなく、<= なのは何故でしょうか。
< を使って条件を厳しくしても、
xs = [0], n = 1 ===> filter (<n) xs = [0]
[0] に含まれない最小数 = 1
xs = [1], n = 1 ===> filter (<n) xs = []
[] に含まれない最小数 = 0
このように問題無いように思えます。
315デフォルトの名無しさん
2020/05/07(木) 16:47:46.68ID:/pjDMUqX 事実を述べているだけに見えるが
何故あの事実ではなくこの事実を切り取ったのかを知りたがるのが面白い
何故あの事実ではなくこの事実を切り取ったのかを知りたがるのが面白い
316デフォルトの名無しさん
2020/05/07(木) 17:22:10.29ID:mCGt79kv >>314
その直前に
[0..(length xs)] の範囲にある数の少なくとも1つはxsに含まれていない
とあるので(鳩の巣原理)、その自然な帰結として
length xs より大きい数は、たとえxsに含まれていたとしても探索の対象にする必要はない
ということで filter (<= n) xs (where n = length xs) が出てくるのだと思う
そこで filter (<n) xs では意味がわからない(自明ではない)
その直前に
[0..(length xs)] の範囲にある数の少なくとも1つはxsに含まれていない
とあるので(鳩の巣原理)、その自然な帰結として
length xs より大きい数は、たとえxsに含まれていたとしても探索の対象にする必要はない
ということで filter (<= n) xs (where n = length xs) が出てくるのだと思う
そこで filter (<n) xs では意味がわからない(自明ではない)
317デフォルトの名無しさん
2020/05/08(金) 15:02:16.95ID:H/a69LIv 仕事でhaskell使ってる人いる?
318デフォルトの名無しさん
2020/05/08(金) 17:29:16.16ID:3cwUCrUk319デフォルトの名無しさん
2020/05/08(金) 18:31:16.41ID:HMlJY84s320デフォルトの名無しさん
2020/05/09(土) 06:20:07.12ID:djQF9o2a >>319
金融系?
金融系?
321デフォルトの名無しさん
2020/05/10(日) 01:20:32.76ID:nxDhOjOb322デフォルトの名無しさん
2020/05/22(金) 10:43:13.79ID:9QfQmUEB https://wiki.haskell.org/Pronunciation
>Below are some notes for beginners on how to pronounce those strange Haskell operators and 'read' Haskell programs.
>>317
https://mevius.5ch.net/test/read.cgi/tech/1548720347/925-
>Below are some notes for beginners on how to pronounce those strange Haskell operators and 'read' Haskell programs.
>>317
https://mevius.5ch.net/test/read.cgi/tech/1548720347/925-
323デフォルトの名無しさん
2020/05/23(土) 00:35:45.46ID:PUmkxvlF 次のように、一つのモナドを遅延的に無限に評価できる関数 repM は定義できるでしょうか?
repM :: (Monad) => m a -> m [a]
xs <- repM (return 1)
print $ take 3 xs -- [1, 1, 1]
ys <- take 2 <$> repM (return 1)
print ys -- [1, 1]
repM :: (Monad) => m a -> m [a]
xs <- repM (return 1)
print $ take 3 xs -- [1, 1, 1]
ys <- take 2 <$> repM (return 1)
print ys -- [1, 1]
324デフォルトの名無しさん
2020/05/23(土) 01:33:43.85ID:m+h1wlWJ >>323
コレは?
repMsub x = return(repeat x)
repM x = x>>=repMsub
main = do
xs<-repM (return 1)
print $ take 3 xs
コレは?
repMsub x = return(repeat x)
repM x = x>>=repMsub
main = do
xs<-repM (return 1)
print $ take 3 xs
325デフォルトの名無しさん
2020/05/23(土) 01:44:01.25ID:m+h1wlWJ あ、コッチの方がかっこいいのか?
でも可読性を犠牲にしだすとperlみたいになるから良くない?
repM = (>>=(return.repeat))
でも可読性を犠牲にしだすとperlみたいになるから良くない?
repM = (>>=(return.repeat))
326デフォルトの名無しさん
2020/05/23(土) 01:56:13.86ID:PUmkxvlF327デフォルトの名無しさん
2020/05/23(土) 02:01:15.20ID:PUmkxvlF >>324
すいません。
補足です。
a <- take 3 <$> repM (getLine >>= print) を評価すれば、
3回の副作用 getLine >>= print が実行され、
a は [(), (), ()] を束縛していて欲しいのです。
すいません。
補足です。
a <- take 3 <$> repM (getLine >>= print) を評価すれば、
3回の副作用 getLine >>= print が実行され、
a は [(), (), ()] を束縛していて欲しいのです。
328デフォルトの名無しさん
2020/05/23(土) 12:08:02.84ID:eKnPDQS2 module Main where
import Control.Monad.IO.Class (MonadIO, liftIO)
import Control.Monad.Trans (lift)
import Data.Conduit (ConduitT, runConduit, yield, (.|))
import qualified Data.Conduit.List as CL
repIO :: (Monad m, MonadIO m) => IO () -> ConduitT () () m ()
repIO io = do
x <- liftIO io
yield x >> repIO io
repM :: Monad m => m o -> ConduitT i o m r
repM m = do
x <- lift m
yield x >> repM m
main :: IO ()
main = do
x1 <- runConduit $ repIO (getLine >>= print) .| CL.take 3
print x1 -- [(),(),()]
x2 <- runConduit $ repM (getLine >>= print) .| CL.take 3
print x2 -- [(),(),()]
let x3 = runConduit $ repM [1,2] .| CL.take 3
print x3 -- [[1,1,1],[1,1,2],[1,2,1],[1,2,2],[2,1,1],[2,1,2],[2,2,1],[2,2,2]]
let x4 = runConduit $ repM [] .| CL.take 3
print (x4 :: [[Int]]) -- []
let x5 = runConduit $ repM (Just 1) .| CL.take 3
print x5 -- Just [1,1,1]
let x6 = runConduit $ repM Nothing .| CL.take 3
print (x6 :: Maybe [Int]) -- Nothing
import Control.Monad.IO.Class (MonadIO, liftIO)
import Control.Monad.Trans (lift)
import Data.Conduit (ConduitT, runConduit, yield, (.|))
import qualified Data.Conduit.List as CL
repIO :: (Monad m, MonadIO m) => IO () -> ConduitT () () m ()
repIO io = do
x <- liftIO io
yield x >> repIO io
repM :: Monad m => m o -> ConduitT i o m r
repM m = do
x <- lift m
yield x >> repM m
main :: IO ()
main = do
x1 <- runConduit $ repIO (getLine >>= print) .| CL.take 3
print x1 -- [(),(),()]
x2 <- runConduit $ repM (getLine >>= print) .| CL.take 3
print x2 -- [(),(),()]
let x3 = runConduit $ repM [1,2] .| CL.take 3
print x3 -- [[1,1,1],[1,1,2],[1,2,1],[1,2,2],[2,1,1],[2,1,2],[2,2,1],[2,2,2]]
let x4 = runConduit $ repM [] .| CL.take 3
print (x4 :: [[Int]]) -- []
let x5 = runConduit $ repM (Just 1) .| CL.take 3
print x5 -- Just [1,1,1]
let x6 = runConduit $ repM Nothing .| CL.take 3
print (x6 :: Maybe [Int]) -- Nothing
329デフォルトの名無しさん
2020/05/23(土) 13:15:18.54ID:eKnPDQS2 あ、ストリームでできたってこういうことか
330デフォルトの名無しさん
2020/05/24(日) 19:39:02.80ID:A0PpU4F1 HaskellのフレームワークってGHC拡張たくさん使われてるから、基本的な文法だけ知ってても、エラーが出たら意味分からなくなるという初心者泣かせな言語だな。地道にコツコツ知らないことを勉強してってるわ。
使いこなしてる人ホンマ羨ましい。
使いこなしてる人ホンマ羨ましい。
331デフォルトの名無しさん
2020/05/24(日) 22:41:15.23ID:oexHBYog The state of GHC on ARM
https://www.haskell.org/ghc/blog/20200515-ghc-on-arm.html
https://www.haskell.org/ghc/blog/20200515-ghc-on-arm.html
332デフォルトの名無しさん
2020/05/25(月) 14:19:28.47ID:HRWjfAZ+333デフォルトの名無しさん
2020/05/25(月) 19:07:59.38ID:b4izxg0D むしろ俺は段階的に学べていいと思ったが
334デフォルトの名無しさん
2020/05/26(火) 13:27:47.52ID:w7oGlmub haskellのフレームワークとやらが具体的に何を指しているのか分からん。
YesodやServantなどのWebフレームワークしか思いつかんが。
いずれにしても、そもそも初心者がフレームワークに頼るべきではない。
初心者を抜けて、さぁ本格的なアプリでも作ってみるかとなった時に使えばいい。
初心者は15パズルやTODOツールみたいな簡単なアプリをフルスクラッチで作ってみて、
言語拡張の必要性や、有用なライブラリの使い方を少しずつ学ぶことを奨める。
YesodやServantなどのWebフレームワークしか思いつかんが。
いずれにしても、そもそも初心者がフレームワークに頼るべきではない。
初心者を抜けて、さぁ本格的なアプリでも作ってみるかとなった時に使えばいい。
初心者は15パズルやTODOツールみたいな簡単なアプリをフルスクラッチで作ってみて、
言語拡張の必要性や、有用なライブラリの使い方を少しずつ学ぶことを奨める。
335デフォルトの名無しさん
2020/05/27(水) 11:14:49.47ID:xJStjlCD そういうのはつまらんのだよ
336デフォルトの名無しさん
2020/05/27(水) 13:16:13.81ID:SIsgBJ88337デフォルトの名無しさん
2020/05/27(水) 17:32:08.93ID:Ro2X8Fae プロジェクトオイラーでもやったら
338デフォルトの名無しさん
2020/05/29(金) 00:14:38.34ID:Hx2r4buk haskell興味あるのですがhaskellの長所と短所ってなんですかる
339デフォルトの名無しさん
2020/05/29(金) 00:57:51.48 若さと情熱に身を任せたいなら C、衰えても続けたいなら Haskell
340デフォルトの名無しさん
2020/05/29(金) 07:22:48.07ID:mJaFRwIH GoとRustが無かった時代には長所がいっぱいあったんだろう
もし、その時代のコードを変更することなく今使えるならそれも長所だが
もし、その時代のコードを変更することなく今使えるならそれも長所だが
341デフォルトの名無しさん
2020/05/29(金) 07:54:35.82ID:7l9AMad4 >>338
長所は難しいことをより難しく書けること
短所は簡単なことでも難しく書かざるを得ないこと
本質的に純粋関数だけじゃリリースできないことも大問題ではある
切り分けで対処しても破壊を含むコードは必ず走る
理想が現実に敗北したような体系だから手を出さないほうがいいよ
長所は難しいことをより難しく書けること
短所は簡単なことでも難しく書かざるを得ないこと
本質的に純粋関数だけじゃリリースできないことも大問題ではある
切り分けで対処しても破壊を含むコードは必ず走る
理想が現実に敗北したような体系だから手を出さないほうがいいよ
342デフォルトの名無しさん
2020/05/29(金) 08:30:23.80ID:wwuYcwOw >>338
長所は、宣言的に分かりやすく書いたプログラムが意図通りにちゃんと動くことです。
何をするのかと、どのようにするのか、この二者をきっちり分けてプログラムできるのがHaskellの大きな魅力です。
(できると言っても、初心者が簡単にできることではありません。 その方向に正しく精進する必要があります。)
短所は、少し上のレスでも言及されていますが、入門を抜けた後に何に取り組めば良いのか分からなくなることです。
始めから何か目的があってHaskellを学び始めたのでしたら良いのですが、そうでなければ、
魅力的な題材の無さに愕然とし、路頭に迷うことになるでしょう。
実はgithub等を漁れば先輩方の様々はジャンルの非常に参考になるプログラムを数多く拝見でき、
自分も取り組んでみたくなる題材がたくさん見つかるのですが、逆に言えばそうやって努力して探さないと見つかりません。
長所は、宣言的に分かりやすく書いたプログラムが意図通りにちゃんと動くことです。
何をするのかと、どのようにするのか、この二者をきっちり分けてプログラムできるのがHaskellの大きな魅力です。
(できると言っても、初心者が簡単にできることではありません。 その方向に正しく精進する必要があります。)
短所は、少し上のレスでも言及されていますが、入門を抜けた後に何に取り組めば良いのか分からなくなることです。
始めから何か目的があってHaskellを学び始めたのでしたら良いのですが、そうでなければ、
魅力的な題材の無さに愕然とし、路頭に迷うことになるでしょう。
実はgithub等を漁れば先輩方の様々はジャンルの非常に参考になるプログラムを数多く拝見でき、
自分も取り組んでみたくなる題材がたくさん見つかるのですが、逆に言えばそうやって努力して探さないと見つかりません。
343デフォルトの名無しさん
2020/05/29(金) 09:57:17.22ID:zRWEM9Qa344デフォルトの名無しさん
2020/05/29(金) 10:24:25.66ID:mJaFRwIH 過激派と思ってた奴に中道の仕事を奪われる
理論的にありえないと思っていた中道と中道の対立が現実になる
理論的にありえないと思っていた中道と中道の対立が現実になる
345デフォルトの名無しさん
2020/05/29(金) 11:22:41.66ID:xO3kN7Ry どんなに多くの短所があろうが
それらに勝る長所が一つあれば好きになる
人でもプログラミング言語でも
それらに勝る長所が一つあれば好きになる
人でもプログラミング言語でも
346デフォルトの名無しさん
2020/05/29(金) 11:35:07.26ID:OBuVVMWP >>338
Haskellに対して懐疑的だった初学者がParsec使ってパーサー書いてみた感じだと
長所
バグ皆無のパーサーをBNFを書き写すように簡潔に書ける
(自分はCやrubyでは書けなかった)
問題に応じて言語内言語を作れるので、コードの量を極めて少なくできる
短所
yaccやbisonより学ぶのにかなり時間がかかりそう
言語内言語を作れてしまうので、ぱっと見ただけではコードを理解できない
(数式を理解するには記号の意味を理解している必要があるのと同じ)
yaccやbisonを使った経験は無い
だが、Haskellの方が応用が利き問題の解決の仕方が美しいので学びたいとは思わなくなった
解決したい具体的な問題があり、自分が学んできた言語だとコードが大きく複雑になりそうで、新しい概念を学ぶ余裕と覚悟があるなら良いと思う
ただ便利そうなのを探してるとか興味があるってだけだと挫折するかも
Haskellを参考にしたより新しい言語を学ぶ方がスマートかもしれない
自分みたいにHaskellに懐疑的で徹底的に学んで悪口書いてやろうと思っているならマジお勧めwww
Haskellに対して懐疑的だった初学者がParsec使ってパーサー書いてみた感じだと
長所
バグ皆無のパーサーをBNFを書き写すように簡潔に書ける
(自分はCやrubyでは書けなかった)
問題に応じて言語内言語を作れるので、コードの量を極めて少なくできる
短所
yaccやbisonより学ぶのにかなり時間がかかりそう
言語内言語を作れてしまうので、ぱっと見ただけではコードを理解できない
(数式を理解するには記号の意味を理解している必要があるのと同じ)
yaccやbisonを使った経験は無い
だが、Haskellの方が応用が利き問題の解決の仕方が美しいので学びたいとは思わなくなった
解決したい具体的な問題があり、自分が学んできた言語だとコードが大きく複雑になりそうで、新しい概念を学ぶ余裕と覚悟があるなら良いと思う
ただ便利そうなのを探してるとか興味があるってだけだと挫折するかも
Haskellを参考にしたより新しい言語を学ぶ方がスマートかもしれない
自分みたいにHaskellに懐疑的で徹底的に学んで悪口書いてやろうと思っているならマジお勧めwww
347デフォルトの名無しさん
2020/05/30(土) 19:36:21.64ID:/U1uledC348デフォルトの名無しさん
2020/06/01(月) 05:07:50.77ID:seoK/8uJ Ocamlを使わないといけなくなっていじり始めたけど、あれもこれも出来なくて不便だな
やたら冗長になるし…
やたら冗長になるし…
349デフォルトの名無しさん
2020/06/01(月) 07:39:57.03ID:L1Mt0gVE 書くのが不便になる代わりに、ぱっと見ただけで理解できるコードになる
という軍師の言葉をぱっと見ただけで信じる者だけがOCamlを使いなさい
という軍師の言葉をぱっと見ただけで信じる者だけがOCamlを使いなさい
350デフォルトの名無しさん
2020/06/01(月) 08:15:03.48ID:dkkr+KCk >>348
できないことの例を教えてください
できないことの例を教えてください
351デフォルトの名無しさん
2020/06/02(火) 01:46:24.39ID:UWOmEsh4352デフォルトの名無しさん
2020/06/05(金) 23:44:13.56ID:aqmhehrv memptyってなんでmunitやmidとかじゃないんだろうな?
emptyの心がよーわからん
文字列のように意味的に空なモノイドもあるが、
空じゃない例の方が圧倒的に多く一般的じゃないか?
ま、どうでもいいんだけどな
emptyの心がよーわからん
文字列のように意味的に空なモノイドもあるが、
空じゃない例の方が圧倒的に多く一般的じゃないか?
ま、どうでもいいんだけどな
353デフォルトの名無しさん
2020/06/06(土) 08:31:53.87 let nop = mempty in ...ってやってる(嘘)
354デフォルトの名無しさん
2020/06/10(水) 18:32:52.39ID:vPvQB3B1 top level の型の指定についての質問です。
haskellのルールでtop levelでないところでは曖昧な型で型推論してくれて通るけど、top levelでは一意に型が決まらないとダメとかなんとかそういうルールがあって、
それでハマって苦労した記憶があるんですが、今その事ふっと思い出したんですが、詳しい内容が思い出せません。
haskell ambiguous top level
とかでグクってもそれらしい話しが出てこないんですけど、なんか思い当たる方おられませんか?
haskellのルールでtop levelでないところでは曖昧な型で型推論してくれて通るけど、top levelでは一意に型が決まらないとダメとかなんとかそういうルールがあって、
それでハマって苦労した記憶があるんですが、今その事ふっと思い出したんですが、詳しい内容が思い出せません。
haskell ambiguous top level
とかでグクってもそれらしい話しが出てこないんですけど、なんか思い当たる方おられませんか?
355デフォルトの名無しさん
2020/06/11(木) 20:57:26.28ID:h7Wncfkb >>354
どういうことか、何か例を挙げることはできますか?
どういうことか、何か例を挙げることはできますか?
356デフォルトの名無しさん
2020/06/11(木) 23:57:59.62ID:oU50Re4d >>355
レスありがとうございます。
当時なんかのプログラム組んでてハマったんですが、どんな例だったかは思い出せません。
しかし制限の名前はわかりました。
monomorphic restriction (単相性制限) という奴でした。
ググってみると多相性を無制限に認めてしまうとメモ化の実装が難しくなるようで性能に影響してしまう事を避けるための制限のようです。
こまめに型宣言書くようにするか、性能を犠牲にしてもよいなら制限をなくすオプションとかもghcとかには用意されてるので実害は無いんですけど、昔ハマって原因突き止めるのにエライ苦労したのでなんだったかふっと気になってお聞きしました。
お騒がせしました。
レスありがとうございます。
当時なんかのプログラム組んでてハマったんですが、どんな例だったかは思い出せません。
しかし制限の名前はわかりました。
monomorphic restriction (単相性制限) という奴でした。
ググってみると多相性を無制限に認めてしまうとメモ化の実装が難しくなるようで性能に影響してしまう事を避けるための制限のようです。
こまめに型宣言書くようにするか、性能を犠牲にしてもよいなら制限をなくすオプションとかもghcとかには用意されてるので実害は無いんですけど、昔ハマって原因突き止めるのにエライ苦労したのでなんだったかふっと気になってお聞きしました。
お騒がせしました。
357デフォルトの名無しさん
2020/06/12(金) 03:07:06.96ID:YpUxhodA358デフォルトの名無しさん
2020/06/20(土) 10:17:27.94ID:6v+H5Lhm 今、最新のghcでdependent typesは使えますか?
359デフォルトの名無しさん
2020/06/23(火) 00:33:49.50ID:2ZCsz0wY 次の2つの関数の型の違いを説明していただけないでしょうか。
f :: C a => T a -> b -> b
g :: T a -> (C a => b) -> b
関数gのようなconstraintの使い方にはこのような効果や意味がある、
とはっきり説明できず、モヤモヤしています。
また、このようなconstraintの使い方には特別な用語があるのでしょうか。
webで検索して調べてはいますが、適切なキーワードが思いつかず、苦労しています。
f :: C a => T a -> b -> b
g :: T a -> (C a => b) -> b
関数gのようなconstraintの使い方にはこのような効果や意味がある、
とはっきり説明できず、モヤモヤしています。
また、このようなconstraintの使い方には特別な用語があるのでしょうか。
webで検索して調べてはいますが、適切なキーワードが思いつかず、苦労しています。
360デフォルトの名無しさん
2020/06/27(土) 16:04:56.51ID:FJC3hMrg Haskell用語だけでは説明できない気がする
C++用語で
a -> bのaとbはtemplateを実体化する引数
C a => bはtemplateの宣言であって実体化ではないのでgは意味がわからない
C++用語で
a -> bのaとbはtemplateを実体化する引数
C a => bはtemplateの宣言であって実体化ではないのでgは意味がわからない
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 【実況】博衣こよりのえちえち歌枠🧪
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 【速報】51歳まで自衛隊になれるように法改正ww [347751896]
- (´・ω・`)おいそこ。そこの貴様だ。へらへらするな。
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
