関数型プログラミング言語 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:L6eYQqyh2020/02/15(土) 17:37:02.81ID:J1bovO5o
ちょいとしたwebサーバーなら良いかもと思うがそれならほかの選択肢があるんだよな。。
2020/02/15(土) 17:41:30.59ID:2OHXNxKd
cabalのbaseのバージョンって指定しないとぶっ壊れてコンパイルできなくなるんだな
ハスケルには罠が多すぎる
ハスケルには罠が多すぎる
2020/02/15(土) 18:24:38.72ID:20tth6Hi
お前らのマシンスペックは?
2020/02/15(土) 18:44:53.36ID:20tth6Hi
>>33
ふーむ
cabal ファイルに書くパッケージのバージョン制限は、
その範囲ならなんでもビルドできますよ、サポートしてますよってサイン。
だから base 含め妥当なバージョンを書いておくべきってのは言えるけど…
状況はリビルドしただけで依存パッケージのバージョンが上がって壊れた、みたいな感じかな?
cabalってそんな風に動作するんだっけか
ふーむ
cabal ファイルに書くパッケージのバージョン制限は、
その範囲ならなんでもビルドできますよ、サポートしてますよってサイン。
だから base 含め妥当なバージョンを書いておくべきってのは言えるけど…
状況はリビルドしただけで依存パッケージのバージョンが上がって壊れた、みたいな感じかな?
cabalってそんな風に動作するんだっけか
2020/02/15(土) 22:05:32.62ID:/Ku5gNgy
>>31
全パッケージの情報をメモリに保持してるんじゃ重くもなるよね…
全部メモリに載ればいいけどそうでなければスラッシングの嵐…
https://github.com/haskell/haddock/issues/462#issuecomment-375822456
全パッケージの情報をメモリに保持してるんじゃ重くもなるよね…
全部メモリに載ればいいけどそうでなければスラッシングの嵐…
https://github.com/haskell/haddock/issues/462#issuecomment-375822456
2020/02/15(土) 22:07:07.48ID:EA+vHtiY
苦節1ヶ月ようやく一歩前進
Haskellがどういう言語か垣間見た気がする
Haskellがどういう言語か垣間見た気がする
2020/02/15(土) 23:05:59.57ID:zVmjMtcZ
>>24
「読みにくい」ではなくて「詠みにくい」かw
「読みにくい」ではなくて「詠みにくい」かw
2020/02/17(月) 22:23:26.89ID:csKbLSDg
よっしゃ〜
JSONパーサーが一応完成!!
長かった…TT
JSONパーサーが一応完成!!
長かった…TT
2020/02/18(火) 01:39:25.24ID:rJfZlmsn
おー おめでとう〜
2020/02/18(火) 05:30:54.79ID:7inEKR1i
>>39
Githubで公開しようぜ
Githubで公開しようぜ
2020/02/18(火) 19:15:31.61ID:MNdOSpyG
2020/02/27(木) 10:14:58.86ID:MNKJ7PH5
PowerShellのリダイレクトに悩まされた
プログラムやHaskell側のエンコーディングの問題かと思ったらPowerShellの問題だった
プログラムやHaskell側のエンコーディングの問題かと思ったらPowerShellの問題だった
2020/02/28(金) 00:06:13.33ID:zwPBDzBW
ハスケルむずくて嫌い
OOPっぽく拡張可能にしようとするとつい存在量化したくなってわけわからなくなる
OOPっぽく拡張可能にしようとするとつい存在量化したくなってわけわからなくなる
2020/02/28(金) 01:47:53.28ID:4Hc/i95c
>>44
目標や方針を明確にしないでなんとなくプログラムすると、
拡張可能化に限らず訳わからなくなることが多いね。
haskellは特に。
だから俺は、面倒でもごく直近のゴールとその道筋をノートに書いてから、
コーディングするように心掛けてる。
頭の中だけで出来るヤツもいるけど、俺はまだ無理。
目標や方針を明確にしないでなんとなくプログラムすると、
拡張可能化に限らず訳わからなくなることが多いね。
haskellは特に。
だから俺は、面倒でもごく直近のゴールとその道筋をノートに書いてから、
コーディングするように心掛けてる。
頭の中だけで出来るヤツもいるけど、俺はまだ無理。
2020/02/28(金) 04:53:58.95ID:Ngh6BpVw
Writing implicit global project config file to: C:\sr\global-project\stack.yaml
Note: You can change the snapshot via the resolver field there.
Using latest snapshot resolver: lts-15.1
Stack has not been tested with GHC versions above 8.6, and using 8.8.2, this may fail
No setup information found for ghc-8.8.2 on your platform.
This probably means a GHC bindist has not yet been added for OS key 'windows32'.
Supported versions: ghc-7.8.4, ghc-7.10.1, ghc-7.10.2, ghc-7.10.3, ghc-8.0.1, ghc-8.0.2, g
hc-8.2.1, ghc-8.2.2, ghc-8.4.1, ghc-8.4.2, ghc-8.4.3, ghc-8.4.4, ghc-8.6.1, ghc-8.6.2, ghc
-8.6.3, ghc-8.6.5
32bit版のWindowsでhaskell Stackが使えない人は
C:\sr\global-project\stack.yamlファイルの
resolver:部分をlts-13.11に変更すればghcのインストールが出来るよ。
GHC8.6.4からは32bit Windowsに対応していない
https://www.haskell.org/ghc/download.html
ページの下に「LTS 13.11 for ghc-8.6.3, published 12 months ago」と書いてあるので
stack.yamlファイルを編集してこのLTSバージョンを指定した後にstack newコマンドを実行すれば
ghcのインストールが始まるよ。
https://www.stackage.org/
Note: You can change the snapshot via the resolver field there.
Using latest snapshot resolver: lts-15.1
Stack has not been tested with GHC versions above 8.6, and using 8.8.2, this may fail
No setup information found for ghc-8.8.2 on your platform.
This probably means a GHC bindist has not yet been added for OS key 'windows32'.
Supported versions: ghc-7.8.4, ghc-7.10.1, ghc-7.10.2, ghc-7.10.3, ghc-8.0.1, ghc-8.0.2, g
hc-8.2.1, ghc-8.2.2, ghc-8.4.1, ghc-8.4.2, ghc-8.4.3, ghc-8.4.4, ghc-8.6.1, ghc-8.6.2, ghc
-8.6.3, ghc-8.6.5
32bit版のWindowsでhaskell Stackが使えない人は
C:\sr\global-project\stack.yamlファイルの
resolver:部分をlts-13.11に変更すればghcのインストールが出来るよ。
GHC8.6.4からは32bit Windowsに対応していない
https://www.haskell.org/ghc/download.html
ページの下に「LTS 13.11 for ghc-8.6.3, published 12 months ago」と書いてあるので
stack.yamlファイルを編集してこのLTSバージョンを指定した後にstack newコマンドを実行すれば
ghcのインストールが始まるよ。
https://www.stackage.org/
2020/02/28(金) 05:14:00.81ID:Ngh6BpVw
48デフォルトの名無しさん
2020/03/02(月) 10:29:59.00ID:vpGCvE08 今までなんとなく難しそうと思って避けてたProfunctor Opticsだけど、ようやくちゃんと勉強し始めた
2020/03/02(月) 19:46:53.52ID:xjpD2ASc
50デフォルトの名無しさん
2020/03/03(火) 00:52:57.62ID:halZ50DI2020/03/03(火) 01:49:10.31ID:PY4QrkVr
Haskell圏論で調和解析の問題解いてんのもしかして?
盛り上がりが別のところにあるとかどういう
盛り上がりが別のところにあるとかどういう
2020/03/03(火) 02:02:40.82ID:PY4QrkVr
俺の推測が正しければHaskellの一番高いニーズは普通のソフト書くためじゃない。研究用だろ
2020/03/03(火) 03:34:00.48ID:UPY0O5FV
2020/03/08(日) 11:51:03.08ID:+VYxIyVU
spacemacs(intero)からvscode(hie)に移行しました。
前者だとノーマルモード時に, s bでターミナル起動+stack ghciできてたのですが、
vscodeで同じようにやるのは、どうやったら出来ますか?
前者だとノーマルモード時に, s bでターミナル起動+stack ghciできてたのですが、
vscodeで同じようにやるのは、どうやったら出来ますか?
2020/03/09(月) 03:54:20.18ID:FT5fJZSn
2020/03/09(月) 10:30:41.72ID:7EQl7t+6
vimでhaskellやってる人いる?
どんな環境?
どんな環境?
2020/03/09(月) 16:04:10.40ID:UrIT8yLm
>>56
以前はhaskell用のプラグインを色々入れてIDE構築してたけど全部消した。
Alignやvim-surroundみたいな汎用的なプラグインはいくつか入れてるけど、
今はhaskellに特化したものは何もない。
結局これが一番使いやすい。
Practical Vim を実践するだけでほぼ十分にすらすらプログラミングできる。
うるさいから、ghcidも止めた。
ウィンドウは左右に分けて左にソースコード、
右にターミナルを開いてる。
左はたまに更に上下に分けて2つのソースを開くこともあるけど一時的。
タブは俺は今のところ必要ないな(使いこなせれば便利だとは思う)。
以前はhaskell用のプラグインを色々入れてIDE構築してたけど全部消した。
Alignやvim-surroundみたいな汎用的なプラグインはいくつか入れてるけど、
今はhaskellに特化したものは何もない。
結局これが一番使いやすい。
Practical Vim を実践するだけでほぼ十分にすらすらプログラミングできる。
うるさいから、ghcidも止めた。
ウィンドウは左右に分けて左にソースコード、
右にターミナルを開いてる。
左はたまに更に上下に分けて2つのソースを開くこともあるけど一時的。
タブは俺は今のところ必要ないな(使いこなせれば便利だとは思う)。
58デフォルトの名無しさん
2020/03/11(水) 22:40:07.34ID:Y6q+o+d/ 勉強用だけど
vim -> markdown -> pandoc -> ipynb -> ihaskell
ihaskellはdockerに隔離してる
もしjupyterを使っているなら
ihaskellのインストールは気を付けた方が良いと思う
通常のインストールをしたらjupyterが壊れた
ihaskellの問題ではなく
pythonのパッケージマネージャーの問題かもしれない
vim -> markdown -> pandoc -> ipynb -> ihaskell
ihaskellはdockerに隔離してる
もしjupyterを使っているなら
ihaskellのインストールは気を付けた方が良いと思う
通常のインストールをしたらjupyterが壊れた
ihaskellの問題ではなく
pythonのパッケージマネージャーの問題かもしれない
59デフォルトの名無しさん
2020/03/22(日) 11:54:03.39ID:WkTC8Krl d:\Users\dev\development\Haskell\test-project>stack setup
Stack has not been tested with GHC versions above 8.6, and using 8.8.3, this may fail
Preparing to install GHC to an isolated location.
This will not interfere with any system-level installation.
Already downloaded.
Already downloaded.
Already downloaded.
Decompressing ghc-8.8.3.tar.xz...
7-Zip 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Processing archive: C:\Users\dev\AppData\Local\Programs\stack\x86_64-windows\ghc-8.8.3.tar.xz
Extracting ghc-8.8.3.tar
Everything is Ok
Size: 2555330560
Compressed: 204702116
Extracting ghc-8.8.3.tar...
Extracted total of 10091 files from ghc-8.8.3.tar
C:\Users\dev\AppData\Local\Programs\stack\x86_64-windows\ghc-8.8.3-tmp4384\ghc-8.8.3\:
renamePath:MoveFileEx "C:\\Users\\dev\\AppData\\Local\\Programs\\stack\\x86_64-windows\\ghc-8.8.3-tmp4384\\ghc-8.8.3\\"
"C:\\Users\\dev\\AppData\\Local\\Programs\\stack\\x86_64-windows\\ghc-8.8.3\\": permission denied (アクセスが拒否されました。)
は?2GBも展開して書き込んでSSDの素子を疲弊させておいてエラー吐いて落ちるとか許せないんだが?
7-zip使って展開してるなら一時展開フォルダの指定させてほしいんだが?
Everything is Ok <- fuck なんだが?
Stack has not been tested with GHC versions above 8.6, and using 8.8.3, this may fail
Preparing to install GHC to an isolated location.
This will not interfere with any system-level installation.
Already downloaded.
Already downloaded.
Already downloaded.
Decompressing ghc-8.8.3.tar.xz...
7-Zip 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Processing archive: C:\Users\dev\AppData\Local\Programs\stack\x86_64-windows\ghc-8.8.3.tar.xz
Extracting ghc-8.8.3.tar
Everything is Ok
Size: 2555330560
Compressed: 204702116
Extracting ghc-8.8.3.tar...
Extracted total of 10091 files from ghc-8.8.3.tar
C:\Users\dev\AppData\Local\Programs\stack\x86_64-windows\ghc-8.8.3-tmp4384\ghc-8.8.3\:
renamePath:MoveFileEx "C:\\Users\\dev\\AppData\\Local\\Programs\\stack\\x86_64-windows\\ghc-8.8.3-tmp4384\\ghc-8.8.3\\"
"C:\\Users\\dev\\AppData\\Local\\Programs\\stack\\x86_64-windows\\ghc-8.8.3\\": permission denied (アクセスが拒否されました。)
は?2GBも展開して書き込んでSSDの素子を疲弊させておいてエラー吐いて落ちるとか許せないんだが?
7-zip使って展開してるなら一時展開フォルダの指定させてほしいんだが?
Everything is Ok <- fuck なんだが?
60デフォルトの名無しさん
2020/03/22(日) 12:10:51.78ID:F4lre3ad スレチなので7-zipのスレへどうぞ
2020/03/22(日) 12:29:04.56ID:7dJergc9
62デフォルトの名無しさん
2020/03/22(日) 14:03:20.64ID:WkTC8Krl ghcを解凍するフォルダのセキュリティを、Everyoneに変更許可を与えると通ったわ
なんでそうなるのかは判らん。フォルダのリネーム(もしくはフォルダ間のファイル移動)に自分以外のアカウントが関わってて、
そいつが権限持ってないから拒否されたってことになるのか
それはそうと、stackの台詞眺めてると this may fail 多いな。自信ないのかよ
そんなんじゃ頼れないよ
なんでそうなるのかは判らん。フォルダのリネーム(もしくはフォルダ間のファイル移動)に自分以外のアカウントが関わってて、
そいつが権限持ってないから拒否されたってことになるのか
それはそうと、stackの台詞眺めてると this may fail 多いな。自信ないのかよ
そんなんじゃ頼れないよ
2020/03/22(日) 15:30:18.75ID:RcMMm8Pa
stackが新しいGHC(を使うStackage LTS)で警告出す件は本家にissue出とるね
Warnings about untested GHC and Cabal
https://github.com/commercialhaskell/stack/issues/5212
stackは去年の7月以来新バージョンのリリースが止まってる
(何かいざこざがあったようなことを目にしたような覚えが…)
https://github.com/commercialhaskell/stack/releases
コミットは止まってないようだけれど
https://github.com/commercialhaskell/stack/commits/master
Warnings about untested GHC and Cabal
https://github.com/commercialhaskell/stack/issues/5212
stackは去年の7月以来新バージョンのリリースが止まってる
(何かいざこざがあったようなことを目にしたような覚えが…)
https://github.com/commercialhaskell/stack/releases
コミットは止まってないようだけれど
https://github.com/commercialhaskell/stack/commits/master
2020/03/24(火) 18:40:03.52ID:u3xw5MBv0
謎のPermission Denied 問題の解決策は chcp 65001 かよやられた
それにしてもサンプルのビルドひとつすら乗り越えられず
あまつさえググることすら向き合えず
大望を抱いたあげく最初の石ころにつまづいて数日を無為に過ごすとは… ああ、
それにしてもサンプルのビルドひとつすら乗り越えられず
あまつさえググることすら向き合えず
大望を抱いたあげく最初の石ころにつまづいて数日を無為に過ごすとは… ああ、
2020/03/24(火) 22:31:38.85ID:5HSbnevP
ドンマイ
2020/03/26(木) 16:09:50.75ID:RWnXSfHI
Haskellって勉強しておくといいことある?
2020/03/26(木) 19:26:27.91ID:Irxv1x7O
Haskell自体はクソの役にも立たないが、Haskellを勉強すると実用言語でプログラミングする際のコードが劇的に綺麗になる
2020/03/26(木) 19:37:30.96ID:V4QUinUk
綺麗になるんじゃなくてHaskellerにとって読みやすいコードを練成できるようになるだけでは
2020/03/26(木) 20:35:55.95
数年ぶりにハスケルやったらタブはやめろって明言してくるようになっててわろうたww
70デフォルトの名無しさん
2020/03/26(木) 20:45:53.86ID:ylVms19z Haskellerにとって読みやすいコードわかる
MonadだのApplicativeだのを無理に再現しようとして
でも型システムがへぼいから限界あって買いてる方も楽しくないし
読む方の辛さは言わずもがなだしで誰も幸せにならない
MonadだのApplicativeだのを無理に再現しようとして
でも型システムがへぼいから限界あって買いてる方も楽しくないし
読む方の辛さは言わずもがなだしで誰も幸せにならない
2020/03/26(木) 23:26:28.22ID:yOeobzsz
他言語よりも深く考察され美しくまとまった言語上の概念がものすごく多数ある
抽象的な概念が他の言語より圧倒的に多くて、プログラミング言語全般についての理解を深めるのにとても役に立つ
比較的習得難易度の高いrust等の言語や、今後出てくるであろう新手の言語等も、haskellを知っていれば習得が容易になったり、深く理解して議論できるようになったりすると思う
実用アプリ作りたいだけならあんまやる必要ない
抽象的な概念が他の言語より圧倒的に多くて、プログラミング言語全般についての理解を深めるのにとても役に立つ
比較的習得難易度の高いrust等の言語や、今後出てくるであろう新手の言語等も、haskellを知っていれば習得が容易になったり、深く理解して議論できるようになったりすると思う
実用アプリ作りたいだけならあんまやる必要ない
2020/03/27(金) 01:37:52.01ID:HVPmfsVI
モナドの説明見て一気に嫌になったな・・
結局書き換えをよしとするなら純粋関数型なんて言うのやめろよと
破壊操作無くしてまともにコードが書けないってことがわかってるなら最初からそのようにしておけと
どう言う目的で作った言語なのか知らないけど読めば読むほどイライラするねこれ
現実は酷いけど理想だけが飾り立てられているという印象
結局書き換えをよしとするなら純粋関数型なんて言うのやめろよと
破壊操作無くしてまともにコードが書けないってことがわかってるなら最初からそのようにしておけと
どう言う目的で作った言語なのか知らないけど読めば読むほどイライラするねこれ
現実は酷いけど理想だけが飾り立てられているという印象
2020/03/27(金) 06:43:54.18ID:ciiZuz5Z
その批判は勉強不足という感じ
2020/03/27(金) 07:23:52.96ID:7fKLUCpq
そんなに間違ってはないけどな。
haskellの解釈としては「命令列」を構成して返しているから副作用はない!
副作用を起こしているのは実行系だ!
みたいな屁理屈だし。
haskellの解釈としては「命令列」を構成して返しているから副作用はない!
副作用を起こしているのは実行系だ!
みたいな屁理屈だし。
2020/03/27(金) 10:39:34.20ID:gM1jKcLP
>>74
それhaskellの説明になってなくね?
それhaskellの説明になってなくね?
2020/03/27(金) 11:19:04.85ID:7fKLUCpq
haskellの評価順序を考えた場合、そう解釈する以外ないと思うが。
他の説明があるなら聞きたいとこだよ。
他の説明があるなら聞きたいとこだよ。
2020/03/27(金) 12:07:06.57ID:gM1jKcLP
2020/03/27(金) 12:12:13.86ID:gM1jKcLP
評価順序ってのは遅延評価のことか
doのことかもよくわからん
doのことかもよくわからん
79デフォルトの名無しさん
2020/03/27(金) 12:16:47.55ID:1lYTVmI1 >結局書き換えをよしとするなら純粋関数型なんて言うのやめろよと
>破壊操作無くしてまともにコードが書けないってことがわかってるなら最初からそのようにしておけと
その批判はやや的外れ
誤解してる人が多いけど、Haskellは別に破壊的代入含む非純粋な計算を禁止しようとしてるのではない
Haskellのやろうとしてるのは、純粋な計算と非純粋な計算を型システムにおいてコンパイラが区別できるようにすることだけだぞ
>破壊操作無くしてまともにコードが書けないってことがわかってるなら最初からそのようにしておけと
その批判はやや的外れ
誤解してる人が多いけど、Haskellは別に破壊的代入含む非純粋な計算を禁止しようとしてるのではない
Haskellのやろうとしてるのは、純粋な計算と非純粋な計算を型システムにおいてコンパイラが区別できるようにすることだけだぞ
80デフォルトの名無しさん
2020/03/27(金) 12:26:56.96ID:1lYTVmI1 というか正直モナドなんかそんな何回も何回も繰り返し議論の対象にするほどのもんでもないだろ…
HaskellスレなんだからHaskellerだけでもっとHaskellらしい話題がしたいのに、
定期的にHapkeller以外がきて水差してくよな
他の手続き方言語のスレでわざわざその言語よく知らない奴が来てifとかforの話を延々されたらどんな気分よ
HaskellスレなんだからHaskellerだけでもっとHaskellらしい話題がしたいのに、
定期的にHapkeller以外がきて水差してくよな
他の手続き方言語のスレでわざわざその言語よく知らない奴が来てifとかforの話を延々されたらどんな気分よ
2020/03/27(金) 13:41:08.32ID:gM1jKcLP
>>74は正しいの?
2020/03/27(金) 16:03:17.87ID:bZjh3B7N
正しいよ
2020/03/27(金) 17:41:48.21ID:IjRdCSk7
- Haskell自体はクソの役にも立たないが、
- 実用アプリ作りたいだけならあんまやる必要ない
何故だい? プログラミング言語なんてただの道具じゃないか。Haskellで良いプログラムが 書けるなら、使うべきなんだ。
『普通のやつらの上をいけ』!『普通のやつらの上をいけ』!
- 実用アプリ作りたいだけならあんまやる必要ない
何故だい? プログラミング言語なんてただの道具じゃないか。Haskellで良いプログラムが 書けるなら、使うべきなんだ。
『普通のやつらの上をいけ』!『普通のやつらの上をいけ』!
2020/03/27(金) 17:56:54.61ID:gM1jKcLP
2020/03/27(金) 18:46:42.72ID:inQsOLrL
IO a は State# RealWorld -> (# State# RealWorld, a #) を newtypeしたものだって話じゃないか?
命令列っていうのはState# RealWorldの列ってことだろ、多分
命令列っていうのはState# RealWorldの列ってことだろ、多分
2020/03/27(金) 18:50:49.13ID:inQsOLrL
言語ではState# RealWorldの列だけ作って副作用ないけど
処理系がState# RealWorldの列を一気にフラッシュしてるから
処理系レベルでは副作用が出るって事だろ
処理系がState# RealWorldの列を一気にフラッシュしてるから
処理系レベルでは副作用が出るって事だろ
2020/03/27(金) 19:23:16.95ID:7fKLUCpq
大体そんな感じ。
IO を返す関数が「副作用をもたない」と解釈するとしたらそう考えるしかない。
とはいえ、IO が発生する関数とそうでない関数をちゃんと分けていい感じに使うって
発想は他の言語でも役に立つ考えだからそこはいいと思う。
IO を返す関数が「副作用をもたない」と解釈するとしたらそう考えるしかない。
とはいえ、IO が発生する関数とそうでない関数をちゃんと分けていい感じに使うって
発想は他の言語でも役に立つ考えだからそこはいいと思う。
2020/03/27(金) 19:40:29.88ID:US1WE8+5
89デフォルトの名無しさん
2020/03/27(金) 19:46:20.02ID:adWh10vX まともなHaskellのテキストがIO返す関数に対して副作用がないなんて書いてるの見たことないけど…
2020/03/27(金) 19:49:25.94ID:bZjh3B7N
>>84
IOアクションのことやろ
IOアクションのことやろ
2020/03/27(金) 19:58:51.05ID:inQsOLrL
realworld Haskellって本のrealworldってghc におけるIOモナドの実装のこと言ってて
モナドの説明で度々出てくる『文脈』っていうのもその命令列のことだと理解してるんだが
どんなもん?
モナドの説明で度々出てくる『文脈』っていうのもその命令列のことだと理解してるんだが
どんなもん?
2020/03/27(金) 20:03:05.86ID:EYGPwzDC
そんな難しく考えなくても計算機に与える命令のつらなりってことじゃないの?
命令には純粋っぽい命令とそうでない命令があるけど、計算(評価)前ならどんな命令だろうが単なる値だから副作用もへったくれもないって理屈じゃね
実際はメモリー上の命令は全て状態だけど、書き換えられないように管理すれば純粋とみなせるってことだろ
例えば、
1+2*2^2^-1+3*3^3^-1
という式を考えた場合、これ全体を値として捉えることもできる
実際値として使おうとすると+、*、^の部分を命令として評価しないといけないけど、使い方によっては全部評価する必要はない
これに10足したかったら
11+2*2^2^-1+3*3^3^-1
で済ますこともできる
これを小数点以下10桁まで表示したくなった時、必要な桁まで計算(評価)すれば良い
18.1551758356…
Haskellの基本的な考え方はこういうことでしょ
命令には純粋っぽい命令とそうでない命令があるけど、計算(評価)前ならどんな命令だろうが単なる値だから副作用もへったくれもないって理屈じゃね
実際はメモリー上の命令は全て状態だけど、書き換えられないように管理すれば純粋とみなせるってことだろ
例えば、
1+2*2^2^-1+3*3^3^-1
という式を考えた場合、これ全体を値として捉えることもできる
実際値として使おうとすると+、*、^の部分を命令として評価しないといけないけど、使い方によっては全部評価する必要はない
これに10足したかったら
11+2*2^2^-1+3*3^3^-1
で済ますこともできる
これを小数点以下10桁まで表示したくなった時、必要な桁まで計算(評価)すれば良い
18.1551758356…
Haskellの基本的な考え方はこういうことでしょ
93デフォルトの名無しさん
2020/03/27(金) 20:16:36.86ID:adWh10vX2020/03/27(金) 20:19:07.32ID:inQsOLrL
遅延評価と考え方は似てると思う。状態の受け渡しとかが出てきてこんがらがる
2020/03/27(金) 20:47:16.26ID:oRj/lH5B
IOモナドに副作用を追いやれることがどれくらい良いことなのかを議論するのは悪くないと思うけど、
副作用が無いなんて嘘付き!とかそもそもプログラムってのは副作用の塊だ!っていうのは誤解か誤読かフカシに騙されたかのどれかなので楽しくない話になる、と思う
副作用が無いなんて嘘付き!とかそもそもプログラムってのは副作用の塊だ!っていうのは誤解か誤読かフカシに騙されたかのどれかなので楽しくない話になる、と思う
2020/03/27(金) 20:49:07.27ID:duAJ897u
関数型と手続き型は共存するべき
関数型はマクロの性質を持っている
関数型はマクロの性質を持っている
2020/03/27(金) 21:16:36.28ID:7fKLUCpq
2020/03/27(金) 21:17:09.88
言語設計者じゃなければ難しいこと考える必要なんてないんだ。ただの Haskell ユーザだろ?
(Haskellの)モナドは Haskell という基盤上で動作するDSLプラットフォームだよ。
各々が Haskell 上で動作するオレオレ言語を作れるんだ。
だから一度それを走らせれば、その中に他人の言語が干渉することはできない。
C++を書いてる途中でJavaコードを直接混ぜることは許されないというトートロジー。
他のDSLとはポートを作ってそこでデータを輸出入する
(Haskellの)モナドはC++コードにJavaコードが混ざらない事を保証してくれる
そういうイメージ
(Haskellの)モナドのライブラリには、その設計者の思想によるDSLの書き方がある。
それを知らずに型とだけ睨めっこしててもIQテストだよ
(Haskellの)モナドは Haskell という基盤上で動作するDSLプラットフォームだよ。
各々が Haskell 上で動作するオレオレ言語を作れるんだ。
だから一度それを走らせれば、その中に他人の言語が干渉することはできない。
C++を書いてる途中でJavaコードを直接混ぜることは許されないというトートロジー。
他のDSLとはポートを作ってそこでデータを輸出入する
(Haskellの)モナドはC++コードにJavaコードが混ざらない事を保証してくれる
そういうイメージ
(Haskellの)モナドのライブラリには、その設計者の思想によるDSLの書き方がある。
それを知らずに型とだけ睨めっこしててもIQテストだよ
100デフォルトの名無しさん
2020/03/27(金) 21:54:14.38ID:62v2q1lB >>96
Haskellの解説本・サイトは「副作用のないプログラミング!」のように喧伝し、
副作用がまるで悪いものであるかのように誤認させているからな。
医薬品の副作用は意図しない有害な作用なので避けるべきだが、プログラム言語の
副作用は数学的な意味で関数とは言えないだけで、意図した有益な作用だから何の
問題もない。副作用があろうとなかろうと、関連が深い処理をまとめて記述する
手続き型言語の方が使いやすい。
純粋関数型なんて実用性が大きく劣る。ラムダ関数や高階関数など関数型の
おいしい所だけ手続き型に取り入れるのが賢明。
Haskellの解説本・サイトは「副作用のないプログラミング!」のように喧伝し、
副作用がまるで悪いものであるかのように誤認させているからな。
医薬品の副作用は意図しない有害な作用なので避けるべきだが、プログラム言語の
副作用は数学的な意味で関数とは言えないだけで、意図した有益な作用だから何の
問題もない。副作用があろうとなかろうと、関連が深い処理をまとめて記述する
手続き型言語の方が使いやすい。
純粋関数型なんて実用性が大きく劣る。ラムダ関数や高階関数など関数型の
おいしい所だけ手続き型に取り入れるのが賢明。
101デフォルトの名無しさん
2020/03/27(金) 22:59:10.30ID:adWh10vX >>100
うん。だからあなたは純粋関数型なんて実用性が大きく劣るものなんか使わず
あなたの好きな手続き型の言語で実用的なプログラム書いてればいいじゃん。
その言語のスレにいってその言語の好きなところとか新しく出てきたすごい機能とかの
話題で盛り上がったほうがよほど生産的ではなくて?
わざわざこんなスレにツバかける来る暇があったらさあ。
うん。だからあなたは純粋関数型なんて実用性が大きく劣るものなんか使わず
あなたの好きな手続き型の言語で実用的なプログラム書いてればいいじゃん。
その言語のスレにいってその言語の好きなところとか新しく出てきたすごい機能とかの
話題で盛り上がったほうがよほど生産的ではなくて?
わざわざこんなスレにツバかける来る暇があったらさあ。
102デフォルトの名無しさん
2020/03/27(金) 23:33:11.47ID:gM1jKcLP >>93
おれも同意だね
ここに限らず命令列、指令書みたいなメタファーで説明しようとするやついるけど
初学者にとって全く理解の助けにならない
プログラミング言語を説明するのに命令列って説明になってない
worldの考え方とモナドによる隠蔽で説明した方が理解しやすい
おれも同意だね
ここに限らず命令列、指令書みたいなメタファーで説明しようとするやついるけど
初学者にとって全く理解の助けにならない
プログラミング言語を説明するのに命令列って説明になってない
worldの考え方とモナドによる隠蔽で説明した方が理解しやすい
103デフォルトの名無しさん
2020/03/27(金) 23:51:09.98ID:bDbxDlCw Mワードは控えようね!
104デフォルトの名無しさん
2020/03/28(土) 09:17:26.94ID:HVNiklPA 実装に依存するな、メタファーに依存しろ
こういうのって実装はコロコロ変わるがメタファーは不変という前提なんだよね
前提が崩れたらやっぱり実装に依存する方が正解だったことになる
こういうのって実装はコロコロ変わるがメタファーは不変という前提なんだよね
前提が崩れたらやっぱり実装に依存する方が正解だったことになる
105デフォルトの名無しさん
2020/03/28(土) 11:10:45.76ID:qGbN9Cxf モナドに関しては、モナドというインターフェースを実装しとけばそのデータはdo記法という特殊構文に対応する
ぐらいの説明でいい
IOモナドに関しても、world云々とかioモナドの実装とか知らなくても問題ない
IOアクションをdo記法で組み合わせて手続型言語風の書き方を再現できることだけ知ってれば良い
ぐらいの説明でいい
IOモナドに関しても、world云々とかioモナドの実装とか知らなくても問題ない
IOアクションをdo記法で組み合わせて手続型言語風の書き方を再現できることだけ知ってれば良い
106デフォルトの名無しさん
2020/03/28(土) 12:07:59.94ID:6h+JM2Gw >>88
ハァ? じゃあ役に立つプログラムを書けばいい
良い/役に立つはどう違うか、説明できないだろ
雰囲気で誤魔化せると思っているお前みたいなアホが真の元凶
良いプログラムが役に立つプログラムと無関係なら、良いなんて指標は何の役にも立たん
Haskellで役に立つプログラムをお前が書け
それができないならせめて、何が足りないのか言え
ハァ? じゃあ役に立つプログラムを書けばいい
良い/役に立つはどう違うか、説明できないだろ
雰囲気で誤魔化せると思っているお前みたいなアホが真の元凶
良いプログラムが役に立つプログラムと無関係なら、良いなんて指標は何の役にも立たん
Haskellで役に立つプログラムをお前が書け
それができないならせめて、何が足りないのか言え
107デフォルトの名無しさん
2020/03/28(土) 12:16:59.39ID:6h+JM2Gw このスレだけでなくあちこちに、"悟り派"が蔓延ってるのにそろそろ一言言っておくぞ
悟り派は、Haskellで悟りを得て自分の言語に持ち帰る
そして自分の製品のなかに不完全なHaskellのサブセットを作ってブーたれる。やれ遅延評価がない、モナドがない…
そんなんするくらいなら最初からHaskellで書けや
新規の参入、それ自体はいいことだが…
悟り派は、Haskellで悟りを得て自分の言語に持ち帰る
そして自分の製品のなかに不完全なHaskellのサブセットを作ってブーたれる。やれ遅延評価がない、モナドがない…
そんなんするくらいなら最初からHaskellで書けや
新規の参入、それ自体はいいことだが…
108デフォルトの名無しさん
2020/03/28(土) 12:38:06.30ID:6h+JM2Gw109デフォルトの名無しさん
2020/03/28(土) 12:40:02.34ID:HVNiklPA110デフォルトの名無しさん
2020/03/28(土) 12:53:14.21ID:6h+JM2Gw >>101
「ついてこれないならついてこなくていい」スタイルもどうかと思うぞ
そんなんやってたら、いずれ砂漠になっちまう
ただでさえスレッドが一週間止まるなんてざらにある現状なのに
>>100
> 副作用があろうとなかろうと、関連が深い処理をまとめて記述する手続き型の方が使いやすい
Haskell はモナドの do 構文を通して手続きをサポートする。手続き型言語でもある
副作用の有無に関わらず処理をモジュールにまとめることはできる
むしろ入出力が型に明に表れるので通信的凝集などの高凝集なモジュール分けに自然になりやすい
ただそれと引き換えに、ラフに、スケッチ的にプログラミングするのがやりにくい
これは原理的なトレードオフではないと思うが、少なくとも現時点ではそうだ
「ついてこれないならついてこなくていい」スタイルもどうかと思うぞ
そんなんやってたら、いずれ砂漠になっちまう
ただでさえスレッドが一週間止まるなんてざらにある現状なのに
>>100
> 副作用があろうとなかろうと、関連が深い処理をまとめて記述する手続き型の方が使いやすい
Haskell はモナドの do 構文を通して手続きをサポートする。手続き型言語でもある
副作用の有無に関わらず処理をモジュールにまとめることはできる
むしろ入出力が型に明に表れるので通信的凝集などの高凝集なモジュール分けに自然になりやすい
ただそれと引き換えに、ラフに、スケッチ的にプログラミングするのがやりにくい
これは原理的なトレードオフではないと思うが、少なくとも現時点ではそうだ
111デフォルトの名無しさん
2020/03/28(土) 13:03:17.72ID:6h+JM2Gw112デフォルトの名無しさん
2020/03/28(土) 13:20:53.69ID:O2QL6TTJ113デフォルトの名無しさん
2020/03/28(土) 13:39:06.65ID:6h+JM2Gw114デフォルトの名無しさん
2020/03/28(土) 13:51:46.86ID:HVNiklPA 言語仕様はよいよね
実装はどこがよいのかさっぱりわからんが、知らなくても問題ないと言われる
実装はどこがよいのかさっぱりわからんが、知らなくても問題ないと言われる
115デフォルトの名無しさん
2020/03/28(土) 14:01:08.48ID:sKmY04JT なら、F#でいいと思います。
副作用もあるし、コンピューテーション式もあるよ。
副作用もあるし、コンピューテーション式もあるよ。
116デフォルトの名無しさん
2020/03/28(土) 14:02:43.23ID:6h+JM2Gw >>114
どこが悪いのかも同じようにわからない、って解釈でいいかな
どこが悪いのかも同じようにわからない、って解釈でいいかな
117デフォルトの名無しさん
2020/03/28(土) 14:06:58.93ID:6h+JM2Gw118デフォルトの名無しさん
2020/03/28(土) 14:08:13.75ID:qGbN9Cxf なんかギルガメッシュいてワロタ
雑種!!!
雑種!!!
119デフォルトの名無しさん
2020/03/28(土) 14:18:52.56ID:6h+JM2Gw120デフォルトの名無しさん
2020/03/29(日) 20:36:56.39ID:+/sFre8I Haskellの仕様=ゲートオブバビロンかよ
121デフォルトの名無しさん
2020/03/29(日) 21:28:27.32ID:AoSt3bhf Haskellの理解に圏論は必要ないとよく言われるけど、
End/Coend勉強したらHaskellのポリモーフィズムとか
存在型のことがよくわかったし、
コモナドとか余代数は圏論的理解しといた方が絶対にいいなと思った
今はKan拡張に挑戦中だわ
End/Coend勉強したらHaskellのポリモーフィズムとか
存在型のことがよくわかったし、
コモナドとか余代数は圏論的理解しといた方が絶対にいいなと思った
今はKan拡張に挑戦中だわ
122デフォルトの名無しさん
2020/03/29(日) 21:37:39.83ID:i8zPSo78 なにで勉強してるの?
123デフォルトの名無しさん
2020/03/29(日) 21:42:16.37ID:dETyGOxM124デフォルトの名無しさん
2020/03/29(日) 21:46:33.53ID:AoSt3bhf >>123
ekmettのライブラリとかHaskellの型システムを強化する言語拡張など、高度に抽象的なコンストラクションがどういう意図で作られていてどういう場面で役に立つのか
ekmettのライブラリとかHaskellの型システムを強化する言語拡張など、高度に抽象的なコンストラクションがどういう意図で作られていてどういう場面で役に立つのか
125デフォルトの名無しさん
2020/03/30(月) 04:34:10.51ID:BWxPCUH7126デフォルトの名無しさん
2020/03/30(月) 04:43:23.39ID:BWxPCUH7 >>66
手続き型言語と数学の関連性が見える様になると、数学的に正しい=バグが無いプログラムを書けるようになる。
だったら数学(特に圏論)だけで良いんだけど、ほぼ数学なHaskellで実際に動かして手続き型言語と数学の共通点を確認出来る。
手続き型言語と数学の関連性が見える様になると、数学的に正しい=バグが無いプログラムを書けるようになる。
だったら数学(特に圏論)だけで良いんだけど、ほぼ数学なHaskellで実際に動かして手続き型言語と数学の共通点を確認出来る。
127デフォルトの名無しさん
2020/03/30(月) 04:50:50.17ID:BWxPCUH7 モナドについてはDSLと言うのは言い得て妙で、mainはIO ()を得るために式を展開する。
その過程で副作用を含む式が動き出す。
個人的にはHaskellは副作用は有るが、参照透明性は崩れていないと言うのがHaskellが純粋関数型言語を主張する根拠なのだと思う。
その過程で副作用を含む式が動き出す。
個人的にはHaskellは副作用は有るが、参照透明性は崩れていないと言うのがHaskellが純粋関数型言語を主張する根拠なのだと思う。
128デフォルトの名無しさん
2020/03/30(月) 05:26:16.39ID:RViSHasz アプリを作ることに限れば、圏論の触り部分すら知らなくても問題ない。
C#やJava、Pythonは大して深く理解していない入門を抜けたばかりの人でも、
アドバイスを受けながら一通りアプリを完成させられるでしょ。
未知の必要なライブラリも本やドキュメントを読んで使い方を学べるでしょ。
haskellもまったく同じ。
入門を抜けたらすぐにアプリを作れる(し、そうすべきだと個人的には思う)。
そこに圏論の知識は微塵も要らない。
圏論の知識が活きるのは意味論をしっかり考える時だ。
**に圏論が役立ったよ、圏論のおかげで**が理解できたよと言っている人は、
意識的にせよ無意識的にせよ、その**の意味論を考えてたのではないか。
それ自体は素晴らしいことだと思う。
でもそこまでの深い理解がなくても実用的なアプリは問題なく作れる。
因みに、バグを減らすのにも圏論の知識は必要ない。
C#やJava、Pythonは大して深く理解していない入門を抜けたばかりの人でも、
アドバイスを受けながら一通りアプリを完成させられるでしょ。
未知の必要なライブラリも本やドキュメントを読んで使い方を学べるでしょ。
haskellもまったく同じ。
入門を抜けたらすぐにアプリを作れる(し、そうすべきだと個人的には思う)。
そこに圏論の知識は微塵も要らない。
圏論の知識が活きるのは意味論をしっかり考える時だ。
**に圏論が役立ったよ、圏論のおかげで**が理解できたよと言っている人は、
意識的にせよ無意識的にせよ、その**の意味論を考えてたのではないか。
それ自体は素晴らしいことだと思う。
でもそこまでの深い理解がなくても実用的なアプリは問題なく作れる。
因みに、バグを減らすのにも圏論の知識は必要ない。
129デフォルトの名無しさん
2020/03/30(月) 07:45:32.21ID:b0eBXbnt HaskellをやってるうちにHaskellの魅力に気づいて
Haskellで何かを作るよりもHaskellという言語自体のことをもっと深く知りたくなることもあるだろ
そう言う場合に圏論は最良の選択だよ
俺としては、Haskellでアプリを作るためにはまあ圏論を知らなくてもいいと思うけど、
圏論を勉強すれば、より高い視点から見えるものもある
必須じゃないが、苦労して圏論を学んだボーナスだな
Haskellで何かを作るよりもHaskellという言語自体のことをもっと深く知りたくなることもあるだろ
そう言う場合に圏論は最良の選択だよ
俺としては、Haskellでアプリを作るためにはまあ圏論を知らなくてもいいと思うけど、
圏論を勉強すれば、より高い視点から見えるものもある
必須じゃないが、苦労して圏論を学んだボーナスだな
130デフォルトの名無しさん
2020/03/30(月) 09:41:29.75ID:rvpoYgUk モナドがらみだとF#のコンピューテーション式使って
async定義されてるらしいな ちょっと、モナド凄いと思ってしまった
裏で共通作業をするって意味なら分からなくはないけど、
その仕掛けは気になる
F# vNext は何が "ヤバい" のか: Monadic Programming の新時代
https://qiita.com/cannorin/items/1936faded610c3ab6c18
async定義されてるらしいな ちょっと、モナド凄いと思ってしまった
裏で共通作業をするって意味なら分からなくはないけど、
その仕掛けは気になる
F# vNext は何が "ヤバい" のか: Monadic Programming の新時代
https://qiita.com/cannorin/items/1936faded610c3ab6c18
131デフォルトの名無しさん
2020/03/30(月) 18:05:04.07ID:Dztwglzx 型クラスとインターフェースがなんとなく似てるので、
型クラスのようなことをインターフェースでまねしようとしてなんか違う…ってなってたけど、やっとなぜなのかわかった
インターフェース(クラスポリモーフィズム)って、そもそも型クラスとは全く別物で、むしろ存在型の一例になってるだな
やっぱり型クラスは型クラスで、型クラスのない言語でこ対応物なんてなかったんや
型クラスのようなことをインターフェースでまねしようとしてなんか違う…ってなってたけど、やっとなぜなのかわかった
インターフェース(クラスポリモーフィズム)って、そもそも型クラスとは全く別物で、むしろ存在型の一例になってるだな
やっぱり型クラスは型クラスで、型クラスのない言語でこ対応物なんてなかったんや
132デフォルトの名無しさん
2020/03/30(月) 21:57:05.25ID:6PZKu5o5 このゲームAIのコンテストにHaskellで参加して優勝してHaskellの強さを見せつけてやれ!
https://www.codingame.com/contests/ocean-of-code/leaderboard/global?column=LANGUAGE&value=Haskell
https://www.codingame.com/contests/ocean-of-code/leaderboard/global?column=LANGUAGE&value=Haskell
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】日本産牛肉の対中国輸出再開協議が中止 [おっさん友の会★]
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★2 [BFU★]
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★3 [BFU★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★4 [ぐれ★]
- 毛寧(もう・ねい)報道官「中国に日本の水産品の市場は無い」 高市首相の国会答弁に「中国民衆の強い怒り」 [ぐれ★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★3 [ぐれ★]
- 【実況】博衣こよりのえちえち雑談🧪★2
- 高市早苗って戦後最悪の総理大臣なのでは🤔? [929293504]
- 【実況】博衣こよりのえちえち雑談🧪
- 【悲報】自民党「聞いてないよー」 [616817505]
- 【高市速報】トヨタ社長、MAGA帽子をかぶって登場し世界を震撼させる [462275543]
- 竹田天皇「ホタテ輸入禁止されても中国以外誰も困らない。中国以外に売ればいいんだから」高市 [931948549]
