20/02/10 18:17:36 L6eYQqyh.net
関数型プログラミング言語 Haskell について語るスレです。
Haskell Language(公式サイト)
URLリンク(www.haskell.org)
日本Haskellユーザーグループ - Haskell-jp
URLリンク(haskell.jp)
前スレ
関数型プログラミング言語Haskell Part32
スレリンク(tech板)
2:デフォルトの名無しさん
20/02/10 18:18:05 L6eYQqyh.net
過去スレ一覧
31) スレリンク(tech板)
30) スレリンク(tech板)
29) スレリンク(tech板)
28) スレリンク(tech板)
27) スレリンク(tech板)
26) スレリンク(tech板)
25) スレリンク(tech板)
24) スレリンク(tech板)
23) スレリンク(tech板)
22) スレリンク(tech板)
21) スレリンク(tech板)
20) スレリンク(tech板)
19) スレリンク(tech板)
18) スレリンク(tech板)
17) スレリンク(tech板)
16) スレリンク(tech板)
15) スレリンク(tech板)
14) スレリンク(tech板)
13) スレリンク(tech板)
12) スレリンク(tech板)
11) スレリンク(tech板)
10) スレリンク(tech板)
09) スレリンク(tech板)
08) スレリンク(tech板)
07) スレリンク(tech板)
06) スレリンク(tech板)
05) スレリンク(tech板)
04) スレリンク(tech板)
03) スレリンク(tech板)
02) スレリンク(tech板)
01) URLリンク(pc.2ch.net)
3:デフォルトの名無しさん
20/02/10 18:18:27 L6eYQqyh.net
関連サイト
(英語)
Haskell - Wikibooks, open books for an open world (ページ内に内容をまとめたPDFあり)
URLリンク(en.wikibooks.org)
Learn You a Haskell for Great Good! (『すごいHaskellたのしく学ぼう!』の無料オンライン版)
URLリンク(learnyouahaskell.com)
Real World Haskell (同名書籍の無料オンライン版)
URLリンク(book.realworldhaskell.org)
(以下、日本語)
Haskell入門 5ステップ - HaskellWiki (公式サイト内、日本語入門セクション)
URLリンク(wiki.haskell.org)
Haskell - Wikibooks (上記Wikibooksの同タイトル日本語版。多くの項目が未編集)
URLリンク(ja.wikibooks.org)
A Gentle Introduction to Haskell, Version 98
URLリンク(www.sampou.org)
Haskell のお勉強
URLリンク(www.shido.info)
お気楽 Haskell プログラミング入門
URLリンク(www.nct9.ne.jp)
本物のプログラマはHaskellを使う
URLリンク(itpro.nikkeibp.co.jp)
[入門]関数プログラミング―質の高いコードをすばやく直感的に書ける!
URLリンク(gihyo.jp)
4:デフォルトの名無しさん
20/02/10 18:28:11 L6eYQqyh.net
質問すると埋まりそうだったので新スレ立てさせてもらいました
Stringで長さ(文字数)ではなくUTF-8コードとしての総バイト数を知れるような関数はありますか?
5:デフォルトの名無しさん
20/02/10 20:12:23.49 gQeDR86I.net
ご苦労さん。関連サイトがやや古くなっている感があるね。
追加
日本Haskellユーザーグループ - Haskell-jp
URLリンク(haskell.jp)
6:デフォルトの名無しさん
20/02/10 20:13:34.39 gQeDR86I.net
>>4
:set -XOverloadedStrings
import Data.Text.Lazy (Text)
import Data.Text.Lazy.Encoding (encodeUtf8)
import Data.ByteString.Lazy (unpack)
length . unpack . encodeUtf8 $ ("あ" :: Text )
-- 3
7:デフォルトの名無しさん
20/02/10 21:23:34.40 L6eYQqyh.net
>>6
ありがとうございます!
>>5
リンク切れは修正したのですが全くお気楽じゃないページにリンクしてしまいましたwww
お気楽 Haskell プログラミング入門
URLリンク(www.nct9.ne.jp)
↓
お気楽 Haskell プログラミング入門
URLリンク(www.nct9.ne.jp)
8:デフォルトの名無しさん
20/02/10 22:24:04.13 qtoUvtqH.net
haskellはオワコンなの?
9:デフォルトの名無しさん
20/02/11 11:04:03 GjzPGqUa.net
universe-base パッケージに Data.Universe.Helpers.diagonals という関数があって、
diagonals [[1,2,3,4], [5,6,7,8], [9,10,11,12]] = [[1], [5,2], [9,6,3], [10,7,4], [11,8], [12]]
という、つまり行列を対角線状に走査して並べ直す計算をしてくれる。
で、これの関数定義がかなりシンプルなんだ。
diagonals :: [[a]] -> [[a]]
diagonals = tail . go [] where
go b es_ = [h | h:_ <- b] : case es_ of
[] -> transpose ts
e:es -> go (e:ts) es
where ts = [t | _:t <- b]
簡単な行列で関数を展開してみると何をやっているのかよく分かる。
これ考えたヤツ天才じゃね?
今の俺は他人のソースを展開して理解するので精一杯だけど、
いつかこんな関数定義ができるよう精進したい。
10:デフォルトの名無しさん
20/02/11 13:36:26 TiXBKsVJ.net
>>9
こんな関数いつ使うん?
11:デフォルトの名無しさん
20/02/11 14:18:49.70 d+YF7kv3.net
J言語でも同様の操作は用意されている。
___ a =: >: i. 3 4
1 2 3 4
5 6 7 8
9 10 11 12
___ </. a
+-+---+-----+------+----+--+
|1|2 5|3 6 9|4 7 10|8 11|12|
+-+---+-----+------+----+--+
12:デフォルトの名無しさん
20/02/11 18:22:03 RQLUpvMq.net
畳み込み計算(foldじゃなくてconvolutionの方)とかやりたいときにあると便利かも?
13:デフォルトの名無しさん
20/02/12 08:25:26.33 5WxWkSHH.net
昔話Project Eulerをhaskellで解くのに同じ役割の関数を自作した記憶がある
14:デフォルトの名無しさん
20/02/12 13:37:04 1ZV1cGD2.net
そもそも天才じゃないとやりたいことが出来ない言語ってどうなんだ
15:デフォルトの名無しさん
20/02/12 13:53:42.16 MDE/KJVl.net
別に他の言語でも10倍量書けば同じことが出来るんだから使わなければいいだけ
共同作業の時は困るから天才だけでチーム組んでもらえばいい
16:デフォルトの名無しさん
20/02/12 14:24:47 B2qV6LKd.net
凡才も天才もほぼ同様に書けるpythonのような素晴らしい言語より、
凡才でも拙く書けるけど天才ならシンプルに書けるhaskellのような素人お断りな言語の方が好き。
魔法みたいで中二心をくすぐられるし、学ぶ意欲がわく。
まぁ、仕事の道具としては迷わず前者を使うけど。
17:デフォルトの名無しさん
20/02/12 20:45:42.48 DqzYUQ+/.net
>>9
Rなら同様の関数をもっと短く分かりやすく書ける。
diagonals <- function(A) lapply(2:sum(dim(A)), function(i) A[row(A) + col(A) == i])
diagonals(matrix(1:12, 3, 4, byrow = TRUE))
これで [[1], [5,2], [9,6,3], [10,7,4], [11,8], [12]] というベクトルのリストが
生成される。
>>16
そうだな。プログラミング言語は問題を解くための道具だが、Haskellの場合、
プログラミング言語自体が解くための問題になっている感じ。
18:デフォルトの名無しさん
20/02/12 22:22:34.78 ohhYjydu.net
Haskellの書き方極めればC言語に匹敵する速度が出せるって聞いたんだけどマジ?
19:デフォルトの名無しさん
20/02/13 00:18:51.95 00coYSBu.net
>>18
嘘
20:デフォルトの名無しさん
20/02/13 02:31:41 7PHqZJTi.net
>>17
短さはともかく解りやすさは一概には言えないと思う。こんなのはどうかな
l = take 3 . unfoldr (Just . splitAt 4) $ [1..12]
diagonals l = map catMaybes . transpose $ zipWith (<>) (inits . repeat $ Nothing) (map (map Just) l)
> プログラミング言語は問題を解くための道具だが、Haskellの場合、
> プログラミング言語自体が解くための問題になっている感じ。
これは言い得ていると思う。Haskell の色んな所に入り込んだ抽象化のおかげで、
従来、アプリを作る末端のプログラマーが各々処理していた仕事が、ライブラリやコンパイラ側に吸い上げられる。
だから全体としての仕事の総量は少なくなる。でもそのかわり、ある程度書けるためにはベースの抽象に慣れる必要がある。
fmapってなに/モナドってなに/Foldableってなに/Lazyってなに... 学習コストは他の言語に比べてずっと高い。
>19
> Haskellの書き方極めればC言語に匹敵する速度が出せる
可能だよ
URLリンク(chrispenner.ca)
21:デフォルトの名無しさん
20/02/13 04:40:03 8j+a4fKo.net
>>20
それ前にも紹介されてて俺もすげーなと思ったが、よく考えると、
じゃあ今wcやlsのようなLinuxコマンドをhaskellで書きたいかと聞かれれば、
べつにいいやと応える。
もっとこう、せめてSwichやPS4のインディーズゲームや、
窓の杜の人気編集ソフトレベルのアプリで、
Cと張り合う猛者は居ないのかな。
Darcsだって肝心の速度ではgitに敵わなかったわけだし。
前に、ブロック崩しでCと比較した人が居たような気がしたが、
どこのページだったかな。
22:デフォルトの名無しさん
20/02/13 16:46:02 7PHqZJTi.net
>>21
俺はコマンドラインユーティリティを Haskell で作るのイイナって思ってる。
型の恩恵でヘルプとか書き漏らさないし、単純な計算なら自動でコマンド化できるっぽい。
Haskell 製のゲームは何故かとても少ない。こちらとか
URLリンク(store.steampowered.com)
beatmaniaのような音ゲーを120行で実装するって触れ込みのチュートリアル
URLリンク(fumieval.github.io)
23:デフォルトの名無しさん
20/02/13 17:49:26.84 0eJoVY/8.net
>>9
Rubyだと
def diagonals(a)
m = a.size
n = a[0].size
a.flatten.group_by.with_index{|v,i| i/m+i%n}.values
end
24:デフォルトの名無しさん
20/02/14 14:43:09.16 3dEdKDtV.net
Haskellで書かれた他人のコードって詠みにくいと思うのは俺だけか?
型クラスやモナドが難しいというより、何がどこで定義されてるかよくわからんし、どういう動作をする関数なのかがぱっと見でわからん。
25:デフォルトの名無しさん
20/02/14 16:56:30 NyO1b3mL.net
言語というより、可読性に対する意識の問題だと思うよ
みんな薄々読みにくいと思ってるけど、互いに頭悪いと思われてマウント取られるのが怖くて言い出せないから、読みにくいコードはいつまでも読みにくいまま
実用言語では「俺が読めないのは書いた奴が悪い」が基本なので、互いに指摘しあうことで自然と改善されていく
26:デフォルトの名無しさん
20/02/14 16:59:16 ONnLM1s9.net
>>24
千差万別としか言いようがない。
Github や hackage にあるコードを見ても、分かりやすいものもあれば、そうでないものもある。
CやJava、Python などと比べて、特に差は無いように思えるが。
何かが定義されている場所は同じモジュール内か、さもなくばインポートしているモジュール内なんだから、
検索すれば見つかるでしょ。
よくわからん、という意味がよくわからん。
動作がぱっと見でわからんというのは、それこそhaskellに限った話ではないのでは?
言語の習熟度や、そのコードで解いている問題のジャンルにもよるでしょ。
27:デフォルトの名無しさん
20/02/15 10:44:39.37 2OHXNxKd.net
The build process was killed (i.e. SIGKILL). The typical reason
for this is that there is not enough memory available (e.g. the OS killed a
process using lots of memory).
へんなエラーが出来て今までコンパイルできなものが急にできなくなった
Haskellは最悪
もう使いたくない
28:デフォルトの名無しさん
20/02/15 10:58:18.94 ELCuAwaW.net
頭が悪い奴が作るとすぐメモリ不足になると死んだじっちゃんが言っていた
29:デフォルトの名無しさん
20/02/15 12:35:42 2OHXNxKd.net
テンプレートハスケルをつかったでっかいソースだからなるのかな
一つのファイルコンパイルするのに10分位掛かるんだけど
分割するようにすればなおる?
30:デフォルトの名無しさん
20/02/15 14:01:44.69 45cVu0dh.net
>>24
問題の関数を使っているモジュールをghciにロードして:iコマンド使えば、
それがどのモジュールで定義されているのか分かるが、
そう言うことではなく?
31:デフォルトの名無しさん
20/02/15 16:54:40 /Ku5gNgy.net
GHC本体も重いけどhaddockもクソ重なんだよなぁ…
Haskellで実用的なプログラムは書けないということなのか、
単にhaddockの設計がアレなのか…
32:デフォルトの名無しさん
20/02/15 17:37:02 J1bovO5o.net
ちょいとしたwebサーバーなら良いかもと思うがそれならほかの選択肢があるんだよな。。
33:デフォルトの名無しさん
20/02/15 17:41:30 2OHXNxKd.net
cabalのbaseのバージョンって指定しないとぶっ壊れてコンパイルできなくなるんだな
ハスケルには罠が多すぎる
34:デフォルトの名無しさん
20/02/15 18:24:38 20tth6Hi.net
お前らのマシンスペックは?
35:デフォルトの名無しさん
20/02/15 18:44:53.36 20tth6Hi.net
>>33
ふーむ
cabal ファイルに書くパッケージのバージョン制限は、
その範囲ならなんでもビルドできますよ、サポートしてますよってサイン。
だから base 含め妥当なバージョンを書いておくべきってのは言えるけど…
状況はリビルドしただけで依存パッケージのバージョンが上がって壊れた、みたいな感じかな?
cabalってそんな風に動作するんだっけか
36:デフォルトの名無しさん
20/02/15 22:05:32 /Ku5gNgy.net
>>31
全パッケージの情報をメモリに保持してるんじゃ重くもなるよね…
全部メモリに載ればいいけどそうでなければスラッシングの嵐…
URLリンク(github.com)
37:デフォルトの名無しさん
20/02/15 22:07:07 EA+vHtiY.net
苦節1ヶ月ようやく一歩前進
Haskellがどういう言語か垣間見た気がする
38:デフォルトの名無しさん
20/02/15 23:05:59 zVmjMtcZ.net
>>24
「読みにくい」ではなくて「詠みにくい」かw
39:デフォルトの名無しさん
20/02/17 22:23:26.89 csKbLSDg.net
よっしゃ~
JSONパーサーが一応完成!!
長かった…TT
40:デフォルトの名無しさん
20/02/18 01:39:25.24 rJfZlmsn.net
おー おめでとう~
41:デフォルトの名無しさん
20/02/18 05:30:54 7inEKR1i.net
>>39
Githubで公開しようぜ
42:デフォルトの名無しさん
20/02/18 19:15:31.61 MNdOSpyG.net
>>40
あざっす
>>41
コンバーターを作る前段階としてのパーサーなのでコンバーターとして完成したら公開する予定です
今はdo、コピペ多用で見苦しいことになってますしwww
43:デフォルトの名無しさん
20/02/27 10:14:58 MNKJ7PH5.net
PowerShellのリダイレクトに悩まされた
プログラムやHaskell側のエンコーディングの問題かと思ったらPowerShellの問題だった
44:デフォルトの名無しさん
20/02/28 00:06:13.33 zwPBDzBW.net
ハスケルむずくて嫌い
OOPっぽく拡張可能にしようとするとつい存在量化したくなってわけわからなくなる
45:デフォルトの名無しさん
20/02/28 01:47:53 4Hc/i95c.net
>>44
目標や方針を明確にしないでなんとなくプログラムすると、
拡張可能化に限らず訳わからなくなることが多いね。
haskellは特に。
だから俺は、面倒でもごく直近のゴールとその道筋をノートに書いてから、
コーディングするように心掛けてる。
頭の中だけで出来るヤツもいるけど、俺はまだ無理。
46:デフォルトの名無しさん
20/02/28 04:53:58 Ngh6BpVw.net
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に対応していない
URLリンク(www.haskell.org)
ページの下に「LTS 13.11 for ghc-8.6.3, published 12 months ago」と書いてあるので
stack.yamlファイルを編集してこのLTSバージョンを指定した後にstack newコマンドを実行すれば
ghcのインストールが始まるよ。
URLリンク(www.stackage.org)
47:デフォルトの名無しさん
20/02/28 05:14:00.81 Ngh6BpVw.net
>>34
OS : Windows 8.1 32bit
CPU : Atom Z3735F 1.33GHz
RAM : 2GB
eMMC : 64GB
48:デフォルトの名無しさん
20/03/02 10:29:59 vpGCvE08.net
今までなんとなく難しそうと思って避けてたProfunctor Opticsだけど、ようやくちゃんと勉強し始めた
49:デフォルトの名無しさん
20/03/02 19:46:53 xjpD2ASc.net
自分も面白そうなので読んでみよう。
>>48
そういうのってどこで情報を仕入れてくるん?
50:デフォルトの名無しさん
20/03/03 00:52:57 halZ50DI.net
>>49
自分は圏論をBartosz Milewskiの動画や本で勉強してるから、
彼のブログやTwitterがメインの情報源だなあ
51:デフォルトの名無しさん
20/03/03 01:49:10 PY4QrkVr.net
Haskell圏論で調和解析の問題解いてんのもしかして?
盛り上がりが別のところにあるとかどういう
52:デフォルトの名無しさん
20/03/03 02:02:40 PY4QrkVr.net
俺の推測が正しければHaskellの一番高いニーズは普通のソフト書くためじゃない。研究用だろ
53:デフォルトの名無しさん
20/03/03 03:34:00.48 UPY0
54:O5FV.net
55:デフォルトの名無しさん
20/03/08 11:51:03 +VYxIyVU.net
spacemacs(intero)からvscode(hie)に移行しました。
前者だとノーマルモード時に, s bでターミナル起動+stack ghciできてたのですが、
vscodeで同じようにやるのは、どうやったら出来ますか?
56:デフォルトの名無しさん
20/03/09 03:54:20 FT5fJZSn.net
>>54
Ctrl + @ でターミナルを開く/閉じる
かな。んで
stack exec ghci
かな。
57:デフォルトの名無しさん
20/03/09 10:30:41.72 7EQl7t+6.net
vimでhaskellやってる人いる?
どんな環境?
58:デフォルトの名無しさん
20/03/09 16:04:10.40 UrIT8yLm.net
>>56
以前はhaskell用のプラグインを色々入れてIDE構築してたけど全部消した。
Alignやvim-surroundみたいな汎用的なプラグインはいくつか入れてるけど、
今はhaskellに特化したものは何もない。
結局これが一番使いやすい。
Practical Vim を実践するだけでほぼ十分にすらすらプログラミングできる。
うるさいから、ghcidも止めた。
ウィンドウは左右に分けて左にソースコード、
右にターミナルを開いてる。
左はたまに更に上下に分けて2つのソースを開くこともあるけど一時的。
タブは俺は今のところ必要ないな(使いこなせれば便利だとは思う)。
59:デフォルトの名無しさん
20/03/11 22:40:07 Y6q+o+d/.net
勉強用だけど
vim -> markdown -> pandoc -> ipynb -> ihaskell
ihaskellはdockerに隔離してる
もしjupyterを使っているなら
ihaskellのインストールは気を付けた方が良いと思う
通常のインストールをしたらjupyterが壊れた
ihaskellの問題ではなく
pythonのパッケージマネージャーの問題かもしれない
60:デフォルトの名無しさん
20/03/22 11:54:03.39 WkTC8Krl.net
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 なんだが?
61:デフォルトの名無しさん
20/03/22 12:10:51 F4lre3ad.net
スレチなので7-zipのスレへどうぞ
62:デフォルトの名無しさん
20/03/22 12:29:04 7dJergc9.net
>>59
C直下にフォルダー作ってそこでやった方がいいよ
たぶん
63:デフォルトの名無しさん
20/03/22 14:03:20 WkTC8Krl.net
ghcを解凍するフォルダのセキュリティを、Everyoneに変更許可を与えると通ったわ
なんでそうなるのかは判らん。フォルダのリネーム(もしくはフォルダ間のファイル移動)に自分以外のアカウントが関わってて、
そいつが権限持ってないから拒否されたってことになるのか
それはそうと、stackの台詞眺めてると this may fail 多いな。自信ないのかよ
そんなんじゃ頼れないよ
64:デフォルトの名無しさん
20/03/22 15:30:18.75 RcMMm8Pa.net
stackが新しいGHC(を使うStackage LTS)で警告出す件は本家にissue出とるね
Warnings about untested GHC and Cabal
URLリンク(github.com)
stackは去年の7月以来新バージョンのリリースが止まってる
(何かいざこざがあったようなことを目にしたような覚えが…)
URLリンク(github.com)
コミットは止まってないようだけれど
URLリンク(github.com)
65:デフォルトの名無しさん
20/03/24 18:40:03.52 u3xw5MBv0.net
謎のPermission Denied 問題の解決策は chcp 65001 かよやられた
それにしてもサンプルのビルドひとつすら乗り越えられず
あまつさえググることすら向き合えず
大望を抱いたあげく最初の石ころにつまづいて数日を無為に過ごすとは… ああ、
66:デフォルトの名無しさん
20/03/24 22:31:38.85 5HSbnevP.net
ドンマイ
67:デフォルトの名無しさん
20/03/26 16:09:50.75 RWnXSfHI.net
Haskellって勉強しておくといいことある?
68:デフォルトの名無しさん
20/03/26 19:26:27 Irxv1x7O.net
Haskell自体はクソの役にも立たないが、Haskellを勉強すると実用言語でプログラミングする際のコードが劇的に綺麗になる
69:デフォルトの名無しさん
20/03/26 19:37:30 V4QUinUk.net
綺麗になるんじゃなくてHaskellerにとって読みやすいコードを練成できるようになるだけでは
70:デフォルトの名無しさん
20/03/26 20:35:55.95 .net
数年ぶりにハスケルやったらタブはやめろって明言してくるようになっててわろうたww
71:デフォルトの名無しさん
20/03/26 20:45:53 ylVms19z.net
Haskellerにとって読みやすいコードわかる
MonadだのApplicativeだのを無理に再現しようとして
でも型システムがへぼいから限界あって買いてる方も楽しくないし
読む方の辛さは言わずもがなだしで誰も幸せにならない
72:デフォルトの名無しさん
20/03/26 23:26:28.22 yOeobzsz.net
他言語よりも深く考察され美しくまとまった言語上の概念がものすごく多数ある
抽象的な概念が他の言語より圧倒的に多くて、プログラミング言語全般についての理解を深めるのにとても役に立つ
比較的習得難易度の高いrust等の言語や、今後出てくるであろう新手の言語等も、haskellを知っていれば習得が容易になったり、深く理解して議論できるようになったりすると思う
実用アプリ作りたいだけならあんまやる必要ない
73:デフォルトの名無しさん
20/03/27 01:37:52.01 HVPmfsVI.net
モナドの説明見て一気に嫌になったな・・
結局書き換えをよしとするなら純粋関数型なんて言うのやめろよと
破壊操作無くしてまともにコードが書けないってことがわかってるなら最初からそのようにしておけと
どう言う目的で作った言語なのか知らないけど読めば読むほどイライラするねこれ
現実は酷いけど理想だけが飾り立てられているという印象
74:デフォルトの名無しさん
20/03/27 06:43:54 ciiZuz5Z.net
その批判は勉強不足という感じ
75:デフォルトの名無しさん
20/03/27 07:23:52.96 7fKLUCpq.net
そんなに間違ってはないけどな。
haskellの解釈としては「命令列」を構成して返しているから副作用はない!
副作用を起こしているのは実行系だ!
みたいな屁理屈だし。
76:デフォルトの名無しさん
20/03/27 10:39:34 gM1jKcLP.net
>>74
それhaskellの説明になってなくね?
77:デフォルトの名無しさん
20/03/27 11:19:04.85 7fKLUCpq.net
haskellの評価順序を考えた場合、そう解釈する以外ないと思うが。
他の説明があるなら聞きたいとこだよ。
78:デフォルトの名無しさん
20/03/27 12:07:06 gM1jKcLP.net
>>76
もう少し詳しくたのむ
評価順序を考えたらどうして命令列になんの?
79:デフォルトの名無しさん
20/03/27 12:12:13 gM1jKcLP.net
評価順序ってのは遅延評価のことか
doのことかもよくわからん
80:デフォルトの名無しさん
20/03/27 12:16:47 1lYTVmI1.net
>結局書き換えをよしとするなら純粋関数型なんて言うのやめろよと
>破壊操作無くしてまともにコードが書けないってことがわかってるなら最初からそのようにしておけと
その批判はやや的外れ
誤解してる人が多いけど、Haskellは別に破壊的代入含む非純粋な計算を禁止しようとしてるのではない
Haskellのやろうとしてるのは、純粋な計算と非純粋な計算を型システムにおいてコンパイラが区別できるようにすることだけだぞ
81:デフォルトの名無しさん
20/03/27 12:26:56.96 1lYTVmI1.net
というか正直モナドなんかそんな何回も何回も繰り返し議論の対象にするほどのもんでもないだろ…
HaskellスレなんだからHaskellerだけでもっとHaskellらしい話題がしたいのに、
定期的にHapkeller以外がきて水差してくよな
他の手続き方言語のスレでわざわざその言語よく知らない奴が来てifとかforの話を延々されたらどんな気分よ
82:デフォルトの名無しさん
20/03/27 13:41:08 gM1jKcLP.net
>>74は正しいの?
83:デフォルトの名無しさん
20/03/27 16:03:17.87 bZjh3B7N.net
正しいよ
84:デフォルトの名無しさん
20/03/27 17:41:48 IjRdCSk7.net
- Haskell自体はクソの役にも立たないが、
- 実用アプリ作りたいだけならあんまやる必要ない
何故だい? プログラミング言語なんてただの道具じゃないか。Haskellで良いプログラムが 書けるなら、使うべきなんだ。
『普通のやつらの上をいけ』!『普通のやつらの上をいけ』!
85:デフォルトの名無しさん
20/03/27 17:56:54 gM1jKcLP.net
>>82
説明頼む
命令列って何なの?
86:デフォルトの名無しさん
20/03/27 18:46:42.72 inQsOLrL.net
IO a は State# RealWorld -> (# State# RealWorld, a #) を newtypeしたものだって話じゃないか?
命令列っていうのはState# RealWorldの列ってことだろ、多分
87:デフォルトの名無しさん
20/03/27 18:50:49.13 inQsOLrL.net
言語ではState# RealWorldの列だけ作って副作用ないけど
処理系がState# RealWorldの列を一気にフラッシュしてるから
処理系レベルでは副作用が出るって事だろ
88:デフォルトの名無しさん
20/03/27 19:23:16 7fKLUCpq.net
大体そんな感じ。
IO を返す関数が「副作用をもたない」と解釈するとしたらそう考えるしかない。
とはいえ、IO が発生する関数とそうでない関数をちゃんと分けていい感じに使うって
発想は他の言語でも役に立つ考えだからそこはいいと思う。
89:デフォルトの名無しさん
20/03/27 19:40:29 US1WE8+5.net
>>83
目的は良いプログラムを書くことではなく役に立つプログラムを書くことだろう
お前のようにそこを履き違えてる奴が多いからHaskellがいつまでもクソの役にも立たないと言われ続けるんだよ
90:デフォルトの名無しさん
20/03/27 19:46:20 adWh10vX.net
まともなHaskellのテキストがIO返す関数に対して副作用がないなんて書いてるの見たことないけど…
91:デフォルトの名無しさん
20/03/27 19:49:25 bZjh3B7N.net
>>84
IOアクションのことやろ
92:デフォルトの名無しさん
20/03/27 19:58:51.05 inQsOLrL.net
realworld Haskellって本のrealworldってghc におけるIOモナドの実装のこと言ってて
モナドの説明で度々出てくる『文脈』っていうのもその命令列のことだと理解してるんだが
どんなもん?
93:デフォルトの名無しさん
20/03/27 20:03:05.86 EYGPwzDC.net
そんな難しく考えなくても計算機に与える命令のつらなりってことじゃないの?
命令には純粋っぽい命令とそうでない命令があるけど、計算(評価)前ならどんな命令だろうが単なる値だから副作用もへったくれもないって理屈じゃね
実際はメモリー上の命令は全て状態だけど、書き換えられないように管理すれば純粋とみなせるってことだろ
例えば、
1+2*2^2^-1+3*3^3^-1
という式を考えた場合、これ全体を値として捉えることもできる
実際値として使おうとすると+、*、^の部分を命令として評価しないといけないけど、使い方によっては全部評価する必要はない
これに10足したかったら
11+2*2^2^-1+3*3^3^-1
で済ますこともできる
これを小数点以下10桁まで表示したくなった時、必要な桁まで計算(評価)すれば良い
‭18.1551758356…
Haskellの基本的な考え方はこういうことでしょ
94:デフォルトの名無しさん
20/03/27 20:16:36 adWh10vX.net
まずはっきりさせておきたいが、Haskellのテキストで
「命令列」なるものは出てこんし誰もそんなものを使ってモナドを説明しようとしてない。
あくまで「命令列」とは、>>74が自身でモナドを理解するために有用な概念だと見出し定義した用語と考えるべきだ
だからここで有意義な議論がしたいなら、まず目的を確認する必要がある。
我々は>>74さんの頭の中を理解したいのか?
それともモナドに対してより良い理解を形成したいのか?
95:デフォルトの名無しさん
20/03/27 20:19:07 inQsOLrL.net
遅延評価と考え方は似てると思う。状態の受け渡しとかが出てきてこんがらがる
96:デフォルトの名無しさん
20/03/27 20:21:43 inQsOLrL.net
>>93
自分も>>74の理解で問題ないと思うんだよ
97:デフォルトの名無しさん
20/03/27 20:47:16.26 oRj/lH5B.net
IOモナドに副作用を追いやれることがどれくらい良いことなのかを議論するのは悪くないと思うけど、
副作用が無いなんて嘘付き!とかそもそもプログラムってのは副作用の塊だ!っていうのは誤解か誤読かフカシに騙されたかのどれかなので楽しくない話になる、と思う
98:デフォルトの名無しさん
20/03/27 20:49:07.27 duAJ897u.net
関数型と手続き型は共存するべき
関数型はマクロの性質を持っている
99:デフォルトの名無しさん
20/03/27 21:16:36.28 7fKLUCpq.net
>>93
別に厳密に何か言ってるわけでもないからあんたの思ってる通りでええよ。
ただの解釈だからこだわらずに勝手に理解したらいいさ。
100:デフォルトの名無しさん
20/03/27 21:17:09.88 .net
言語設計者じゃなければ難しいこと考える必要なんてないんだ。ただの Haskell ユーザだろ?
(Haskellの)モナドは Haskell という基盤上で動作するDSLプラットフォームだよ。
各々が Haskell 上で動作するオレオレ言語を作れるんだ。
だから一度それを走らせれば、その中に他人の言語が干渉することはできない。
C++を書いてる途中でJavaコードを直接混ぜることは許されないというトートロジー。
他のDSLとはポートを作ってそこでデータを輸出入する
(Haskellの)モナドはC++コードにJavaコードが混ざらない事を保証してくれる
そういうイメージ
(Haskellの)モナドのライブラリには、その設計者の思想によるDSLの書き方がある。
それを知らずに型とだけ睨めっこしててもIQテストだよ
101:デフォルトの名無しさん
20/03/27 21:54:14 62v2q1lB.net
>>96
Haskellの解説本・サイトは「副作用のないプログラミング!」のように喧伝し、
副作用がまるで悪いものであるかのように誤認させているからな。
医薬品の副作用は意図しない有害な作用なので避けるべきだが、プログラム言語の
副作用は数学的な意味で関数とは言えないだけで、意図した有益な作用だから何の
問題�
102:烽ネい。副作用があろうとなかろうと、関連が深い処理をまとめて記述する 手続き型言語の方が使いやすい。 純粋関数型なんて実用性が大きく劣る。ラムダ関数や高階関数など関数型の おいしい所だけ手続き型に取り入れるのが賢明。
103:デフォルトの名無しさん
20/03/27 22:59:10.30 adWh10vX.net
>>100
うん。だからあなたは純粋関数型なんて実用性が大きく劣るものなんか使わず
あなたの好きな手続き型の言語で実用的なプログラム書いてればいいじゃん。
その言語のスレにいってその言語の好きなところとか新しく出てきたすごい機能とかの
話題で盛り上がったほうがよほど生産的ではなくて?
わざわざこんなスレにツバかける来る暇があったらさあ。
104:デフォルトの名無しさん
20/03/27 23:33:11 gM1jKcLP.net
>>93
おれも同意だね
ここに限らず命令列、指令書みたいなメタファーで説明しようとするやついるけど
初学者にとって全く理解の助けにならない
プログラミング言語を説明するのに命令列って説明になってない
worldの考え方とモナドによる隠蔽で説明した方が理解しやすい
105:デフォルトの名無しさん
20/03/27 23:51:09 bDbxDlCw.net
Mワードは控えようね!
106:デフォルトの名無しさん
20/03/28 09:17:26 HVNiklPA.net
実装に依存するな、メタファーに依存しろ
こういうのって実装はコロコロ変わるがメタファーは不変という前提なんだよね
前提が崩れたらやっぱり実装に依存する方が正解だったことになる
107:デフォルトの名無しさん
20/03/28 11:10:45 qGbN9Cxf.net
モナドに関しては、モナドというインターフェースを実装しとけばそのデータはdo記法という特殊構文に対応する
ぐらいの説明でいい
IOモナドに関しても、world云々とかioモナドの実装とか知らなくても問題ない
IOアクションをdo記法で組み合わせて手続型言語風の書き方を再現できることだけ知ってれば良い
108:デフォルトの名無しさん
20/03/28 12:07:59 6h+JM2Gw.net
>>88
ハァ? じゃあ役に立つプログラムを書けばいい
良い/役に立つはどう違うか、説明できないだろ
雰囲気で誤魔化せると思っているお前みたいなアホが真の元凶
良いプログラムが役に立つプログラムと無関係なら、良いなんて指標は何の役にも立たん
Haskellで役に立つプログラムをお前が書け
それができないならせめて、何が足りないのか言え
109:デフォルトの名無しさん
20/03/28 12:16:59 6h+JM2Gw.net
このスレだけでなくあちこちに、"悟り派"が蔓延ってるのにそろそろ一言言っておくぞ
悟り派は、Haskellで悟りを得て自分の言語に持ち帰る
そして自分の製品のなかに不完全なHaskellのサブセットを作ってブーたれる。やれ遅延評価がない、モナドがない…
そんなんするくらいなら最初からHaskellで書けや
新規の参入、それ自体はいいことだが…
110:デフォルトの名無しさん
20/03/28 12:38:06 6h+JM2Gw.net
>>104
IOアクションの命令書のメタファーは登場した当初から変わってないでしょう
>>102
指令書のメタファーは初学者にとって助けにならない?
そうかな、わかりやすいと思ったけど
RealWorld の State 、って説明はこっちはこっちで腑に落ちたし
>>92
の解説は、自分はなんか違和感を持ったが… うまく反論できない
111:デフォルトの名無しさん
20/03/28 12:40:02 HVNiklPA.net
>>107
雑種のことをハーフとか不完全とか言うやつは悟りが足りない
むしろ二倍
112:デフォルトの名無しさん
20/03/28 12:53:14 6h+JM2Gw.net
>>101
「ついてこれないならついてこなくていい」スタイルもどうかと思うぞ
そんなんやってたら、いずれ砂漠になっちまう
ただでさえスレッドが一週間止まるなんてざらにある現状なのに
>>100
> 副作用があろうとなかろうと、関連が深い処理をまとめて記述する手続き型の方が使いやすい
Haskell はモナドの do 構文を通して手続きをサポートする。手続き型言語でもある
副作用の有無に関わらず処理をモジュールにまとめることはできる
むしろ入出力が型に明に表れるので通信的凝集などの高凝集なモジュール分けに自然になりやすい
ただそれと引き換えに、ラフに、スケッチ的にプログラミングするのがやりにくい
これは原理的なトレードオフではないと思うが、少なくとも現時点ではそうだ
113:デフォルトの名無しさん
20/03/28 13:03:17 6h+JM2Gw.net
>>109
(雑種って言い方がすでに汚ねぇ)
人種にするみたいに、思想に文句をつけてるわけじゃなくてだな…
プログラマー全体の仕事の総量は増えてるってことを批判してる。非効率
114:デフォルトの名無しさん
20/03/28 13:20:53.69 O2QL6TTJ.net
>>107
悟り派はそんな面倒なことしません。
他の言語に移るだけです。
115:デフォルトの名無しさん
20/03/28 13:39:06.65 6h+JM2Gw.net
>>112
そんな面倒なこと?
Haskell風ライブラリを作ることか? それとも最初からHaskellでやること?
後者だとすれば何がボトルネックになっているのか
116:デフォルトの名無しさん
20/03/28 13:51:46.86 HVNiklPA.net
言語仕様はよいよね
実装はどこがよいのかさっぱりわからんが、知らなくても問題ないと言われる
117:デフォルトの名無しさん
20/03/28 14:01:08.48 sKmY04JT.net
なら、F#でいいと思います。
副作用もあるし、コンピューテーション式もあるよ。
118:デフォルトの名無しさん
20/03/28 14:02:43.23 6h+JM2Gw.net
>>114
どこが悪いのかも同じようにわからない、って解釈でいいかな
119:デフォルトの名無しさん
20/03/28 14:06:58.93 6h+JM2Gw.net
>>115
ふむ、それらがあった方が Haskell よりも良い―その理由を説明してほしい
Haskell サイドに取り入れられるかもしれない
120:デフォルトの名無しさん
20/03/28 14:08:13.75 qGbN9Cxf.net
なんかギルガメッシュいてワロタ
雑種!!!
121:デフォルトの名無しさん
20/03/28 14:18:52 6h+JM2Gw.net
>>118
突然妙なことを言い出したので、釣られて笑ってしまった
ギルガメッシュってなに?
122:デフォルトの名無しさん
20/03/29 20:36:56 +/sFre8I.net
Haskellの仕様=ゲートオブバビロンかよ
123:デフォルトの名無しさん
20/03/29 21:28:27.32 AoSt3bhf.net
Haskellの理解に圏論は必要ないとよく言われるけど、
End/Coend勉強したらHaskellのポリモーフィズムとか
存在型のことがよくわかったし、
コモナドとか余代数は圏論的理解しといた方が絶対にいいなと思った
今はKan拡張に挑戦中だわ
124:デフォルトの名無しさん
20/03/29 21:37:39.83 i8zPSo78.net
なにで勉強してるの?
125:デフォルトの名無しさん
20/03/29 21:42:16.37 dETyGOxM.net
>>121
理解が何を指しているかによる
haskellでwebアプリやゲームを作ることができる
というのが理解の指標なら、圏論は知らなくてもいい
126:デフォルトの名無しさん
20/03/29 21:46:33.53 AoSt3bhf.net
>>123
ekmettのライブラリとかHaskellの型システムを強化する言語拡張など、高度に抽象的なコンストラクションがどういう意図で作られていてどういう場面で役に立つのか
127:デフォルトの名無しさん
20/03/30 04:34:10 BWxPCUH7.net
>>121
うい。
知ってた方が良いけど、知らなくても使えはする。
むしろ最近はHaskellより圏論に興味が移ってる。
(Haskellやその他の言語はその理論の確認用)
128:デフォルトの名無しさん
20/03/30 04:43:23.39 BWxPCUH7.net
>>66
手続き型言語と数学の関連性が見える様になると、数学的に正しい=バグが無いプログラムを書けるようになる。
だったら数学(特に圏論)だけで良いんだけど、ほぼ数学なHaskellで実際に動かして手続き型言語と数学の共通点を確認出来る。
129:デフォルトの名無しさん
20/03/30 04:50:50.17 BWxPCUH7.net
モナドについてはDSLと言うのは言い得て妙で、mainはIO ()を得るために式を展開する。
その過程で副作用を含む式が動き出す。
個人的にはHaskellは副作用は有るが、参照透明性は崩れていないと言うのがHaskellが純粋関数型言語を主張する根拠なのだと思う。
130:デフォルトの名無しさん
20/03/30 05:26:16.39 RViSHasz.net
アプリを作ることに限れば、圏論の触り部分すら知らなくても問題ない。
C#やJava、Pythonは大して深く理解していない入門を抜けたばかりの人でも、
アドバイスを受けながら一通りアプリを完成させられるでしょ。
未知の必要なライブラリも本やドキュメントを読んで使い方を学べるでしょ。
haskellもまったく同じ。
入門を抜けたらすぐにアプリを作れる(し、そうすべきだと個人的には思う)。
そこに圏論の知識は微塵も要らない。
圏論の知識が活きるのは意味論をしっかり考える時だ。
**に圏論が役立ったよ、圏論のおかげで**が理解できたよと言っている人は、
意識的にせよ無意識的にせよ、その**の意味論を考えてたのではないか。
それ自体は素晴らしいことだと思う。
でもそこまでの深い理解がなくても実用的なアプリは問題なく作れる。
因みに、バグを減らすのにも圏論の知識は必要ない。
131:デフォルトの名無しさん
20/03/30 07:45:32.21 b0eBXbnt.net
HaskellをやってるうちにHaskellの魅力に気づいて
Haskellで何かを作るよりもHaskellという言語自体のことをもっと深く知りたくなることもあるだろ
そう言う場合に圏論は最良の選択だよ
俺としては、Haskellでアプリを作るためにはまあ圏論を知らなくてもいいと思うけど、
圏論を勉強すれば、より高い視点から見えるものもある
必須じゃないが、苦労して圏論を学んだボーナスだな
132:デフォルトの名無しさん
20/03/30 09:41:29 rvpoYgUk.net
モナドがらみだとF#のコンピューテーション式使って
async定義されてるらしいな ちょっと、モナド凄いと思ってしまった
裏で共通作業をするって意味なら分からなくはないけど、
その仕掛けは気になる
F# vNext は何が "ヤバい" のか: Monadic Programming の新時代
URLリンク(qiita.com)
133:デフォルトの名無しさん
20/03/30 18:05:04.07 Dztwglzx.net
型クラスとインターフェースがなんとなく似てるので、
型クラスのようなことをインターフェースでまねしようとしてなんか違う…ってなってたけど、やっとなぜなのかわかった
インターフェース(クラスポリモーフィズム)って、そもそも型クラスとは全く別物で、むしろ存在型の一例になってるだな
やっぱり型クラスは型クラスで、型クラスのない言語でこ対応物なんてなかったんや
134:デフォルトの名無しさん
20/03/30 21:57:05.25 6PZKu5o5.net
このゲームAIのコンテストにHaskellで参加して優勝してHaskellの強さを見せつけてやれ!
URLリンク(www.codingame.com)
135:デフォルトの名無しさん
20/03/31 00:52:19 K6rzEVwz.net
ハスケラが目的のあるプログラミングなんてやるわけないじゃん
136:デフォルトの名無しさん
20/03/31 11:43:52.10 0EnDwwx5.net
目的はお金でも知識でもいいよ
例えばお金自体が目的だったらそのお金が無駄に多過ぎるんじゃないかとか心配する必要はない
137:デフォルトの名無しさん
20/03/31 13:19:45 OTxurRkT.net
お金、知識でもいいけど
たいていは俺すげーしたいだけだから問題。
138:デフォルトの名無しさん
20/03/31 13:55:00.32 0EnDwwx5.net
事前に目的を決めても「俺すげーしたいだけ」とかいう真の目的が後から出てくる
事前に嘘をついていたことか問題だと思えば沈黙が正解
だが隠し事をしていたことが問題だと思えば沈黙は悪
黙っているくらいなら嘘でも何か言った方がマシと思ってますます嘘が増える
139:デフォルトの名無しさん
20/03/31 18:03:32.10 pMTrfgV+.net
存在しない敵に吠え続ける
140:デフォルトの名無しさん
20/03/31 18:05:52.76 j91gJgzW.net
>>135
学歴コンプやばそう
141:デフォルトの名無しさん
20/03/31 21:38:58 OTxurRkT.net
だから金だろうと知識だろうと、学歴だろうとなんでもいいんだよ。
糞みたいなプライドで開発の邪魔しなけりゃな。
142:デフォルトの名無しさん
20/03/31 23:05:18 gNdJtX6R.net
学歴だろうと知識だろうと仕事の腕前だろうと、
お前らキモオタクがそういう承認欲求を満たそうとすると裏目に出るだけだぞ
表ではお世辞であしらわれて、裏ではチョロいとナメられるのがオチ
143:デフォルトの名無しさん
20/03/31 23:24:14 .net
トンデモを惹きつけてしまうのは Haskell の業
アイドルにストーカーがついてまわるのと抽象的構造が似ている
Haskell は高度知的アイドル型言語
144:デフォルトの名無しさん
20/04/01 02:53:00.79 Bo1VBV+d.net
確かにこのスレは厄介に粘着されてるしアイドルっぽい
145:デフォルトの名無しさん
20/04/01 02:57:48.54 nmdW+DZF.net
地下アイドルの宿命だろう
146:デフォルトの名無しさん
20/04/01 11:45:02 BVkSt5Rw.net
確かにここは地下アイドルスレみたいだな
147:デフォルトの名無しさん
20/04/01 13:27:17.06 0siDwK7Q.net
simulationライブラリで純粋な関数式プログラミングをする
URLリンク(x0000.net)
UIライブラリ (C#, 2D) を作ったよ
URLリンク(x0000.net)
学術巨大掲示板群: アルファ・ラボ
URLリンク(x0000.net)
物理学 化学 数学 生物学 天文学 地理地学
IT 電子 工学 国語 方言 言語学 など
148:デフォルトの名無しさん
20/04/01 18:26:51 mH5B7GLX.net
そういえばsinもcosも地上の人に粘着されてたのを思い出した
149:デフォルトの名無しさん
20/04/01 19:36:45.58 MGV55WuQz
%stack_root%\global-project\stack.yaml
に
resolver: lts-13.25
と記述があるんですが、
stack new ~~
すると作成されるプロジェクトの
stack.yamlに
resolver: lts-15.6
と記述されます。
global-projectの設定が反映されると思っていたんですが認識間違っていますでしょうか
150:デフォルトの名無しさん
20/04/02 01:11:13.45 I8hlhwK7.net
対偶と逆の区別もついてなさげな人の登場
151:デフォルトの名無しさん
20/04/02 01:48:53 l/tHPd/2.net
Haskellって技術書少ないよな
みんな何で勉強してんの?
152:デフォルトの名無しさん
20/04/02 05:42:29.80 RR8wjO3M.net
>>149
マイナー言語の割には多いと思うけど。
人気ランクが上のkotlinやclojure、elmは少ないし、同じぐらいの順位のprologやsmalltalkは新刊が出てなくて、昔出た書籍のほとんどが絶版している。
153:デフォルトの名無しさん
20/04/02 06:21:32.55 RR8wjO3M.net
技術書は英語圏の次に多いと思う。
154:デフォルトの名無しさん
20/04/02 06:33:57.84 6/i0fPdP.net
>>149
特別なことはなく、ネットや本で学んだよ
例えば
・Thinking wih Types
型レベルプログラミングを学んだ
URLリンク(leanpub.com)
・Optics By Example
lensに代表されるopticsを学んだ
URLリンク(leanpub.com)
・Hexagonal architecture
Haskell & DDD でアプリを作るパターンの一つを学んだ
URLリンク(blog.ploeh.dk)
・Effect system
IOを安全に扱う方法を学んだ (正確にはモナドの合成を分かりやすく扱う方法)
DDDによるアプリ制作においてさっきのが戦略とすれば、こっちは戦術
URLリンク(okmij.org)
ライブラリもいくつかある
あと、Redditの投稿を追いかけていれば色々学べる
URLリンク(www.reddit.com)
と言うか、紹介しきれないほどの情報がネットに溢れているんだが
155:デフォルトの名無しさん
20/04/02 15:08:36.64 ttPPzFzn.net
情報収集のスキルは人それぞれでしょ
reddit はニッチなライブラリの質問とかリリース情報みたいなの多くね?
かったるくていちいち追ってられない
俺はそういうのは twitter にいる Haskell 賢人に任せている
これ面白いよ!って記事をフィルタして共有してくれるから、それ読んで勉強してる
ありがたや ありがたや
156:デフォルトの名無しさん
20/04/02 20:27:07.35 te9iYBJx.net
>>152
有益
157:デフォルトの名無しさん
20/04/03 02:49:35 y19+kh0E.net
>>151
日本語の書籍の事だろ?
それは先ずない
ロシアが次点あとはドイツなんかも結構あるドイツは翻訳ばっかだが(´・ω・`)
158:デフォルトの名無しさん
20/04/03 07:10:48.62 SDolupu6.net
技術書って入門書も含む?
159:デフォルトの名無しさん
20/04/03 07:55:31 a6cZ/qJ8.net
一切含まない
160:デフォルトの名無しさん
20/04/03 08:28:58 m8zbpAqS.net
おいおい
161:デフォルトの名無しさん
20/04/03 09:31:03 DM1ooV3Z.net
>>155
日本以外にも翻訳文化はあるのね。
有名なのが翻訳されるのはわかるけど。
162:デフォルトの名無しさん
20/04/03 16:45:57.10 ked6xspS.net
日本の翻訳文化って外国語を自国語に取り込んじゃうのがすごいとかなんとかって話で、翻訳量自体は別にそれほどでもなかった気がする
163:デフォルトの名無しさん
20/04/03 17:43:30 VVxcL9Mv.net
オーバーシュートω
ロックダウンωωω
164:デフォルトの名無しさん
20/04/03 17:47:56 JepZACIl.net
マジレスすると多分中国語が英語の次だろうな
場合によっちゃ英語より多いかもしれん
中国語の場合は入ってくるだけで出ていかないブラックホールだから実態が掴みにくい
165:デフォルトの名無しさん
20/04/03 17:57:20.01 VVxcL9Mv.net
twitterでHaskellを薦められたので本気になった
URLリンク(www.si-ght.jp)
166:デフォルトの名無しさん
20/04/03 18:00:08.86 AMwYpRxM.net
かわいいです
167:デフォルトの名無しさん
20/04/03 18:57:42 Yw161NPN.net
はーい先生怒らないから犯人は正直に手を挙げなさい
>「プログラミング初心者なんですけど、何からやったらいいですか?
> 最近ようやくJavaScriptが少しだけ読めるようになってきた頃です」。
>
> そうしたら「JavaScriptなんて暗黒で恐ろしい言語はダメだ、純粋関数型言語であるHaskellからやった方がいい」みたいなことを言われました。
URLリンク(codezine.jp)
> 「わからなかったけど、コードを書いて動かす楽しみと快感を覚えたんですよ。
> Haskellをもっと理解したいと相談したら、『圏論の基礎』という本を勧められました。
> でもその本も全然わからなかったんです(笑)」
168:デフォルトの名無しさん
20/04/03 19:05:03 AMwYpRxM.net
犯人オタクキモすぎてわろ
169:デフォルトの名無しさん
20/04/03 20:09:26 Yw161NPN.net
初手マックレーンは草 ...ってか鬼畜
もっとこう RealWorldHaskell とかあるでしょ
170:デフォルトの名無しさん
20/04/03 20:11:51 Yw161NPN.net
>>164
エンジニアの容姿を判定するのは無しだろうよ...
なんだ Haskell は、高潔なのは言語仕様だけか?
171:デフォルトの名無しさん
20/04/03 22:34:37 pfIiNzTY.net
Haskellってかわいいよね
172:デフォルトの名無しさん
20/04/03 23:04:02 a6cZ/qJ8.net
口うるさいBBAのイメージ
173:デフォルトの名無しさん
20/04/03 23:36:38.26 Wo72KAYJ.net
学術的に進化してもらって
実用的な部分をメジャー言語が取り込んでくれればおk
174:デフォルトの名無しさん
20/04/04 00:13:54.60 HfszwI8c.net
>>152
>例えば
テンプレ入
175:デフォルトの名無しさん
20/04/04 08:53:29.14 S6De3LG2.net
>>168
haskellをチョイスするのが只のミーハーではない。
176:デフォルトの名無しさん
20/04/04 14:52:35.68 ym7hUMuJ.net
むしろミーハーでもなんでも構わんのだけど、いち Haskeller が女性ってだけで
容姿を蔑んだり・持ち上げたりする連中がいるなら―もしいるのなら反省してほしい、と思った。
DSL を Freeモナドにするか、Tagless Final にするか、それぞれのメリットはなにか…
Haskeller はそういうことで悩んでいたいのであって、性別とかを理由に余計な荷物を背負わせるべきじゃない。
(ghc も依存している llvm はそういう辛さを避ける為に行動規範を定めているんだけど、いまのところまだ ghc には無いっぽい)
URLリンク(llvm.org)
177:デフォルトの名無しさん
20/04/04 14:56:51.64 ym7hUMuJ.net
>>170
個人的な Haskell のイメージは、なんかシュッとした紳士みたいな感じ
エラーメッセージは確かに、ともすると口うるさいw
178:デフォルトの名無しさん
20/04/04 15:03:44.40 ZRwDcP1M.net
キモすぎて怖い…
179:デフォルトの名無しさん
20/04/04 17:30:47.61 V7kxF8pu.net
haskellでやり過ぎなほど徹底的に宣言性にこだわってプログラムする実験をしてみたが、なかなか面白いぞ。
手続き的になりがちなゲームプログラミングでやってみると特に。
180:デフォルトの名無しさん
20/04/04 20:17:31.82 H4c+c10U.net
今から出会い系の女と会ってくるがやばいんか?
181:デフォルトの名無しさん
20/04/05 00:47:08 .net
Haskellスレってワードサラダbotに荒らされてるのか
182:デフォルトの名無しさん
20/04/05 12:14:43.03 P07lI1PF.net
ちょまど洗脳されかけたんか
URLリンク(www.youtube.com)
URLリンク(yoshiakikamiya.com)
URLリンク(jibun-discovery.com)
183:デフォルトの名無しさん
20/04/05 12:26:37 P07lI1PF.net
>>178
感染がやばい
URLリンク(startyourenginebrrrrr.net)
お気を付けて
184:デフォルトの名無しさん
20/04/05 14:11:08 TA9KtVo9.net
haskellでアクションって言葉よく出てくるけど定義なに?
185:デフォルトの名無しさん
20/04/05 14:28:05 k4Q+DqWZ.net
>>182
HaskellでActionという用語をみたことが俺はないけど、Haskell直系の子孫のPureScriptだと
型注釈の->の右辺にEffectがある関数をアクションと定義するそうだ。
EffectはHaskellでいうIOに対応すると思ってもらえたらいい。
ちなみに->の左辺にEffectがある関数をハンドラという。
-- アクション
throwException :: forall a. Error -> Effect a
-- ハンドラ
catchException :: forall a. (Error -> Effect a) -> Effect a -> Effect a
186:デフォルトの名無しさん
20/04/05 19:12:11 690ELyL1.net
>>177
レポジトリ教えて
187:デフォルトの名無しさん
20/04/05 20:19:22 eydcY4ib.net
レポジトリって、サッポロ一番の新しい味?
188:デフォルトの名無しさん
20/04/05 20:26:40 glUSLxyq.net
そうだよ
189:デフォルトの名無しさん
20/04/05 21:28:22 BHv6uIvk.net
レポジトレ教えて
190:デフォルトの名無しさん
20/04/06 02:32:17.14 .net
FRPは死滅しちゃったの?
191:デフォルトの名無しさん
20/04/06 03:19:32.28 2h0eofxY.net
>>188
どういうこと?
192:デフォルトの名無しさん
20/04/06 04:59:07 qqlpdYMz.net
どういうことなの…
193:デフォルトの名無しさん
20/04/06 05:06:41.75 kxm5p/Vo.net
むしろ>>189-190がどういうことなのかわからない
194:デフォルトの名無しさん
20/04/06 09:29:24 H7siEM1Y.net
CabalのドキュメントのSecure repository のところ、
root.jsonのkey idを省略するのはお勧めしないとか書いてるけど、
なにかしないといけないの?
195:デフォルトの名無しさん
20/04/06 22:36:41.14 MPGLY2yf.net
このスレにはHaskellerなんかいないということがよくわかるな
196:デフォルトの名無しさん
20/04/07 07:33:13 UmG0jYGu.net
本当に言語に詳しい奴ってのはその言語の弱点をしっかりおさえてるもんよ。
197:デフォルトの名無しさん
20/04/07 07:36:16 SJ9J2Mim.net
?
198:デフォルトの名無しさん
20/04/08 08:37:32 .net
IO がオルタナティヴになったのって最近なのか
Aizu Online Judge のGHCだとコンパイルエラーになる
199:デフォルトの名無しさん
20/04/08 22:07:27 .net
let [a,b,c,d] = bokunofunction in ~
このリストってWHNFにならないのな
200:デフォルトの名無しさん
20/04/12 14:46:14.07 qLx35nn/.net
目的は二つ
式を評価し過ぎないこと
副作用を実行し過ぎないこと
手段はただ一つ
最外簡約
201:デフォルトの名無しさん
20/04/12 18:21:55 flKXD0mo.net
haskellでコロナ感染シミュ作るやつ誰もおらんのか?
202:デフォルトの名無しさん
20/04/12 19:41:52 EEQhx4+u.net
codewarの問題をHaskellで解いてみてるんだけど
、12000msタイムアウト多発する
リスト内包表記とか再帰はHaskellerはあんまり使わないの?
nに含まれる素因数とかすぐタイムアウトする
203:デフォルトの名無しさん
20/04/12 21:46:48 ogEgOOCw.net
>>200
arithmoiとかのライブラリ使うとめっちゃ速いよ
ソースを見てみるといいかも
あと、prime factorization haskell
とかをキーワードにして検索してみるとか
204:デフォルトの名無しさん
20/04/12 22:42:42.81 .net
Haskell で競プロ辛い・・・
200000個の整数読み込んで処理するような問題だとMLEになりがちだ
本当にそんなに使ってるのかよ・・・疑わしいなぁ
ランタイムがとりあえずあるだけ使おうとして、足りなくなったらもう要らない空間を探して、そこに上書きするようにしてるの?
だとすると、とりあえずあるだけ使おう期間の段階で上限ぶっちぎってるってことかね
もしかして
GHC「記憶域ください」
競プロシステム「あなたは上限なのでもうあげません」
GHC「仕方ないな、じゃあガベージコレクションしてなんとかやりくりしよう」
ではなくて
GHC「記憶域ください」
競プロシステム「どうぞどうぞ」
GHC「どうも」
競プロシステム「はいそれは毒まんじゅうです。今のでMLEです」
GHC「えっ!!!!」
こうなんじゃないか?
ソースコードで「メモリ使用はは150MB以内で巧くやりくりしろ」とかって制限の指示できないんですか?
205:デフォルトの名無しさん
20/04/12 23:16:24.10 DjxEmd7z.net
Haskellで競プロやるテクをまとめた同人誌があったような
206:デフォルトの名無しさん
20/04/12 23:19:22.76 BXIcY8lZ.net
薄い本があったのか…
207:デフォルトの名無しさん
20/04/13 04:15:51.10 WjwyibsT.net
mleってなに?
Maximum likelihood estimation しか思いつかん
208:デフォルトの名無しさん
20/04/13 06:08:11.82 Er/sUT94.net
ぼくもそれしか…
209:デフォルトの名無しさん
20/04/13 06:56:02.05 rnoGia+U.net
競プロ mle でググってみた
MLE
メモリリミットエラー(Memory Limit Error)の略
提出したプログラムが許可された以上のメモリを使用したときに出る
(一部のコンテストで採用されている表現)
210:デフォルトの名無しさん
20/04/13 12:33:53 tr0y4100.net
>>202
とりあえずローカルでプロファイル取って実行してみると
スペースリークや大量のGCの原因が推定できるはず
(「Haskell プロファイラ」とかでぐぐって)
未評価のサンクが大量に積み上がっているとか、
イミュータブルな連結リストの使い方が悪くて
大量の一時リストを作ってしまっているとか
あたりじゃないかと想像してみる
211:デフォルトの名無しさん
20/04/13 13:06:48.82 pEw+DEbK.net
タイムアウトのやつ
この問題やってて
URLリンク(www.codewars.com)
通らないコードがこれ
sumOfDivided :: [Integer] -> [(Integer, Integer)]
sumOfDivided xs = map (\x -> (x,foldr (+) 0 (filter ((==0).(flip rem x) ) xs)) ) $ prime_factors ( product xs) 2
where
prime_factors 1 _ = []
prime_factors m n
| rem m n == 0 = n : (prime_factors (quot m n) $ n+1)
| otherwise = prime_factors m $ n+1
こういう感じでコード組み立てるんだけど、他の問題でもしょっちゅうタイムアウト起こしてる
応答の速いコードにするにはどんなふうに変えていけばいいかを知りたい
cで言うと値コピーしてソートしないでポインタでソートすると速いみたいな
212:デフォルトの名無しさん
20/04/13 21:38:04.55 tr0y4100.net
>>209
どう改善すればいいかはすぐにはわからないが
prime_factors関数は末尾再帰ではない再帰をしているから容易にスペースリークしそうな感じはする
213:デフォルトの名無しさん
20/04/14 00:39:23 .net
できるだけリストを避けて
読み込みもByteString 版 getContents と readInt の組み合わせで高速化
そして困ったときの Data.Sequence 様やで!
C系提出者は軒並み 0.1 s で処理を終えている中、220MB 1.9 s 弱かけてなんとか致命傷でかいくぐった
制限超過してる気がするが、マイナー言語へのアファーマティブアクションかな?
くぅ~疲れましたw これにて AC です!
214:デフォルトの名無しさん
20/04/14 01:34:33 .net
>>209
prime_factorsだけど
quotRem なら一回で両方得られる
探索は3から+2ずつ探すべき
n が√m を超えてしまったら探索を打ち切るべき
リストの整数全部に出てくる素因数を予めリストアップしたいんだろうけど
そのprime_factorsだと絶対に素因数が存在しない、(2を除く)偶数空間と√mの後の空間をmに達するまで探していてとてもとても無駄
この無駄はmが大きいほど酷いことになるが、見事に君のコードはproductなんてしてmを巨大化させている
例えば、1000000 の素因数は少なくとも1000 以降は存在しないのに1001, 1002, 1003, ... , 999998, 999999, 1000000 まで探すところを想像してみて
一目気づいたのはそんなところかね。先ずはそこを直してから一局といったところか
215:デフォルトの名無しさん
20/04/14 01:52:08 .net
>>208
まあ最終手段はそうなるんでしょうね
しかし早すぎる段階での最適化はたいてい悪手って言われてるし
その前に、アルゴリズムの選定が間違ってるんではとなって、あれこれ作戦変えて
いつしか通るわけです。すると結局いつまで経ってもプロファイリングを練習する機会が来ないんですよね
216:デフォルトの名無しさん
20/04/14 01:54:06 .net
あ、いや、あれこれ作戦変えるヒントを得る為にプロファイリングするのか・・・
やっぱり手を出してみるか
217:デフォルトの名無しさん
20/04/14 10:48:29 Ez55nAck.net
異世界人「アルゴリズムをあれこれ変える」
主人公「言語をあれこれ変えてみよう」
218:デフォルトの名無しさん
20/04/14 11:07:53 aAi/G6aw.net
時間とメモリ両面のcomplexity考えるのは最適化以前の話
219:デフォルトの名無しさん
20/04/15 17:46:40 /WUIZ9Nz.net
>>212
39の素因数って3,13よね?
√39が6くらいだから探索区間は√mじゃ不十分かなって
でも確かに偶数はいらないから2:[3,5..]でいいね
全部の素因数のリスト作るのに全部掛け合わせて処理はひどいなと見直して思った
リストは早くするなら使わない方針なのね
Quatremとリスト以外(sequenceが代替?)調べて組み込んでみようかな
220:デフォルトの名無しさん
20/04/15 17:47:28 /WUIZ9Nz.net
お礼書き忘れたすみません
回答ありがとうござ�
221:「ますなんとか通ってもらいます
222:デフォルトの名無しさん
20/04/15 19:54:09 JKZ0KcR7.net
>>217
なんの話かよく知らないけど39を素因数分解してるのなら、
約数として3が見つかったら、その時点でもう39が素数じゃないことが判明するから、13を調べる必要ないよ
√39以下の数字調べればオッケー
223:デフォルトの名無しさん
20/04/15 19:55:22 JKZ0KcR7.net
間違えた
「素因数分解してるのなら」じゃなくて「素数判定してるのなら」だった
224:デフォルトの名無しさん
20/04/16 01:02:59.81 6p+dWGIK.net
>>209
計算速度や使用メモリ量以前に、解が正しくないよ。
試しに sumOfDivided [8] やってみ。
もう少し言うと、prime_factors 関数がおかしい。
関数名に相応しくない計算をしていられる。
まずは、必要な個数の正しい素数列を作ることを考えた方がいいと思うぞ。
225:デフォルトの名無しさん
20/04/16 01:13:24.21 .net
>>217
あ、説明で嘘を吐いてしまった。確かに√m以降に素因数は存在しないは偽だった
それでも尚、√で打ち切っていい手筋は揺るがない。
√39より前の3を発見して、39 `quot` 3 (=13) に対して再帰的に同じことをする
ただし割ることを試すのは今割り切れた素数からね(同じ素数で複数回われることもある)。
もう一回3で割ろうとして失敗し、次は√13 を超えるので打ち切って、13 は素数と判定してリストに加える
だから結果として、√m 以降の素因数を取りこぼすことはない
226:デフォルトの名無しさん
20/04/16 09:43:04 xRrLSzP4.net
>>222
素数系のアルゴリズムは手続き的にはよく知られたものが色々あるけど
それをHaskellっぽく(宣言的に)定義しろって言われると割と悩む
STMonadとか使えば手続き的な実装はできるけど何かに負けた気分になる
227:デフォルトの名無しさん
20/04/16 12:23:07.85 DtoAMVDb.net
速度あげようと思ったら、どうのように計算するかということに介入する必要があるから手続き的になるのはしょうがないのでは
228:デフォルトの名無しさん
20/04/16 14:44:08.63 ta7mONc0.net
魔法を使える主人公がなぜか銃を乱射するというマナー違反
を許せない真面目系脇役の魅力
229:デフォルトの名無しさん
20/04/17 17:52:04.90 .net
騎士道はCで書くなど、汚い真似をして勝つことを認めていない
230:デフォルトの名無しさん
20/04/17 18:51:48.64 Tw57yEwr.net
ごきげんよう、高貴なるhaskellプログラマの皆様方
今日も可憐におプログラミングですことよ
ほほほ
231:デフォルトの名無しさん
20/04/17 23:16:02 kOeZUqy9.net
haskellマスターすると新型コロナにかからないってよ
232:デフォルトの名無しさん
20/04/18 03:43:48.65 ehKqAcW4.net
コロナ菌に強い言語なん?
233:デフォルトの名無しさん
20/04/18 11:31:33.48 v8V9P+IO.net
C言語プログラムなどを実行すると電磁波の影響で身体への副作用が発生するからな
副作用を抑え人間本来の自然な免疫力を高めるのがhaskell
234:デフォルトの名無しさん
20/04/18 12:26:02 kkncOpcu.net
haskellマスターで彼女ができました!
235:デフォルトの名無しさん
20/04/18 13:41:19 urv0mT/N.net
>>230
我慢できずにモナドに手を出して感染する事例が後を立たない
モナドは自粛すべきと何度も言われているのに
屁理屈をこねて手を出す者が多すぎる
本当にHaskellに副作用がないのだと詭弁を弄せずごり押しするのならば
絶対にモナドをやるべきではないと言われている
236:デフォルトの名無しさん
20/04/18 19:32:57 DCiZBX2v.net
モナドを「やる」ってなんだよw
モナドを禁止薬物か何かと勘違いしてるのか?
すべての人間は二分される
すなわち「モナドである」人間と、そうでない人間、だ
俺はモナド
お前はモナドではない
「上」で待ってるで
237:デフォルトの名無しさん
20/04/18 20:20:58 aIlZnP1D.net
おれモナド使いだけど、おまえ俺に使われてんのか
238:デフォルトの名無しさん
20/04/18 20:52:26 .net
C言語プログラムなどを実行するとストレスの影響で毛髪への副作用が発生するからな
脱毛を抑え人間本来の自然な論理を書けるのがhaskell
239:デフォルトの名無しさん
20/04/18 22:32:39.62 DCiZBX2v.net
>>234
モナドに使われてるやつほど、自分はモナドを使ってると勘違いするよなw
240:デフォルトの名無しさん
20/04/18 23:24:30 jMxNMUbH.net
モナドを使う時、モナドもまたあなたを使っているのだ
241:デフォルトの名無しさん
20/04/19 01:35:32.46 WM8Q0HWB.net
[状態モナド](URLリンク(wiki.haskell.org))を
[随伴](URLリンク(en.wikipedia.org)) on Rails
に乗せてみる。
``` code
type W x a b = (a, x) -> (b, x)
type S x a b = a -> x -> (b, x)
in_away :: W x c d -> W x b c -> W x a b -> W x a d
in_away cd bc ab = cd . bc . ab
in_home :: S x c d -> S x b c -> S x a b -> S x a d
-- in_home cd bc ab = to_home $ in_away (to_away cd) (to_away bc) (to_away ab) where
-- in_home cd bc ab = ext cd . ext bc . ab where
in_home cd bc ab a = new a %>>=% ab %>>=% bc %>>=% cd where
(%>>=%) = flip ext
ext = to_home_fmap . to_away
new = to_home id
to_home_fmap = (.)
to_home = curry
to_away = uncurry
```
`to_home`が[記事](URLリンク(en.wikipedia.org))での`Phi`
に、`ext`が[Kleisliのスター](URLリンク(en.wikipedia.org))
に対応する。`in_away`は通常の関数の合成で、`in_home`はそれを黒魔術に
翻訳している。
[継続モナド](URLリンク(wiki.haskell.org))も随伴で書ける。
242:デフォルトの名無しさん
20/04/19 01:36:44.08 WM8Q0HWB.net
``` code
type O x a b = (b -> x) -> a -> x
type C x a b = a -> (b -> x) -> x
in_away :: O x c d -> O x b c -> O x a b -> O x a d
in_away cd bc ab = cd %.% bc %.% ab where (%.%) = flip (.)
in_home :: C x c d -> C x b c -> C x a b -> C x a d
-- in_home cd bc ab = to_home $ in_away (to_away cd) (to_away bc) (to_away ab) where
-- in_home cd bc ab = ext cd . ext bc . ab where
in_home cd bc ab a = new a %>>=% ab %>>=% bc %>>=% cd where
(%>>=%) = flip ext
ext = to_home_fmap . to_away
new = to_home id
to_home_fmap = flip (.)
to_home = flip
to_away = flip
```
厳密には、`flip`は随伴ではないが、`Set^op (a, b)`と`Set (b, a)`が集合
として同型になることを使うと、実質的な随伴の役割を果たす。
243:デフォルトの名無しさん
20/04/19 23:13:07 hRJ8C0Os.net
その話題は伸びない。このスレにはHaskellerいないからコード貼ったって誰も読めないし圏論を理解してるやつなんかいないから
244:デフォルトの名無しさん
20/04/20 03:13:59.48 .net
Haskeller 戻ってきて
245:デフォルトの名無しさん
20/04/20 04:21:55.04 VYi0JRSU.net
エアプしかいないの?
246:デフォルトの名無しさん
20/04/20 12:33:40 KoBCLV49.net
ここには数学とプログラミング両方できる人がいるようだからお聞きしたいのだけど
プログラミングのクロージャーってトポロジーのクロージャーから引っ張ってきた用語なの?トポロジーの方の定義を眺めてみてもイマイチつながりが理解出来なくて
247:デフォルトの名無しさん
20/04/20 12:39:30 PYrLoVAx.net
まったく別
248:デフォルトの名無しさん
20/04/20 12:40:47 gGVXVDIS.net
量子化とかもおいおいって思う
249:デフォルトの名無しさん
20/04/20 13:57:45.52 a2Vdb5nD.net
全く別なんすね
ありがとうございます
250:デフォルトの名無しさん
20/04/20 21:31:54.79 CMTCfm7W.net
別でもあるし同じでもある
具体的には
251:デフォルトの名無しさん
20/04/21 00:24:43.90 dIhpNk/e.net
量化子を量子化!
252:デフォルトの名無しさん
20/04/21 01:33:16.33 iOWmjrKd.net
そう言えば、佐野量子化って子もいたな
253:デフォルトの名無しさん
20/04/21 21:16:16.93 JxCMv4cD.net
この言語って純粋に理論的な側面に興味を感じてしまって、アプリ制作進まなくなるわ
254:デフォルトの名無しさん
20/04/23 00:29:18 wNzYQ5IM.net
それよりメモリ管理の理論に興味を感じないか
static変数のようなものを使えばメモリ管理と無縁のアプリ製作ができるのだが
255:デフォルトの名無しさん
20/04/23 02:23:16.94 mBUbZ8gm.net
何を言ってるんだ
256:デフォルトの名無しさん
20/04/23 03:15:59 .net
メモリ管理に興味を感じないか? → メモリ管理と無縁の~ができるのだ
??????
メモリ管理するんじゃなかったのか?
257:デフォルトの名無しさん
20/04/23 07:00:20.01 eoS2PMe8.net
staticおじさん来てんね
258:デフォルトの名無しさん
20/04/23 13:10:01 rjrgI3oq.net
10年以上前から同じ会話してるだろ
免疫がつくまで繰り返すんだぜこれ
259:デフォルトの名無しさん
20/04/23 21:43:23.72 .net
Haskellスレって荒らされてるの?
260:デフォルトの名無しさん
20/04/23 22:27:14.34 mBUbZ8gm.net
これが平常運転
261:デフォルトの名無しさん
20/04/24 01:31:48.04 Zatb8XkV.net
低俗なねらーにはHaskellはら難しすぎたんや…
262:デフォルトの名無しさん
20/04/24 23:19:15.10 FUZNUOcv.net
メモリ管理の様な世俗的な因習に捕らわれず神の領域を安らかたらしめん為の関数型言語では無かったか
263:デフォルトの名無しさん
20/04/25 01:04:25 7jpIjPuc.net
現実のハスケラ達は評価順やサンク潰しの制御のテクニックを競ってマウンティングし合ってるよ
264:デフォルトの名無しさん
20/04/25 01:48:47 n1+IBCwB.net
くだらない事をダベってるくらいなら、Polysemyの基礎でも勉強してろ
URLリンク(sir4ur0n.github.io)
265:デフォルトの名無しさん
20/04/25 04:06:57 .net
それを知るとどんな良い事があるのか、学習の動機づけをください
266:デフォルトの名無しさん
20/04/25 05:14:26.69 n1+IBCwB.net
簡単に言えば、安全で明確でテストしやすいプログラムが書ける。
IOモナドの関数は中でどんなIOアクションでもできてしまい危険だ。
大事なファイルを上書きしようが、大音量でビープを鳴らそうが。
Polysemyに代表されるエフェクトシステムを使うと、
関数の中で使えるIOアクションの内容を関数シグネチャで制限できる。
ファイル読取アクションを宣言した関数の中では、書込や画像表示など他のIOアクションは一切できず安全だ。
また、ビジネスロジックのコードではどんなアクションをするのか(what)というレシピだけを書き、
そのアクションを実際のIOを使ってどの様に実現するか(how)は別のコードで書くことになる。
whatとhowがしっかり分かれ明確だ。
なので、ビジネスロジックのコードは純粋関数で書け、テストしやすくなる。
howのコードだけをモックに変えることもでき、これもまたテストを容易にする。
と言うようなことを例を交えて分かりやすく説明しているのが >>261 の記事だ。
267:デフォルトの名無しさん
20/04/25 08:08:07 .net
目を通しました(理解できたとは言ってない)
粒度の粗い物を制限してもっと細かくして、その組み合わせで書き直すことで間違いを排除する、
(手を入れられない)既存ライブラリに対して、ぼくのかんがえたさいきょうのリファクタリングをエミュレートする基盤となるものですか?
268:デフォルトの名無しさん
20/04/25 10:58:51.70 n1+IBCwB.net
>>264
前半はその通り。
が、すまん、後半は意味が分からない。
リファクタリングをエミュレートするってどういう事?
初めて聞いたフレーズだ。
リファクタリングをする事と、リファクタリングをエミュレートする事の違いを教えてくれ。
269:デフォルトの名無しさん
20/04/25 12:04:03 .net
真のリファクタリングは、設計しなおしてソースコードも書き直す事が含まれるとすると
標準ライブラリであるIOモナドの設計やソースコードを直接弄ることはできませんから、ポリ蝉版は本当にIOを再設計したわけではなく、
リファクタリングを疑似的に再現したという解釈はできないでしょうか
リファクタリングの真似事なのでエミュレートと言いました
270:デフォルトの名無しさん
20/04/25 12:44:25.69 d+Khct7b.net
現実問題として純粋関数だけじゃ成り立たないからね
271:デフォルトの名無しさん
20/04/25 13:20:46.87 n1+IBCwB.net
>>266
なんか、私と貴方の間にリファクタリングという言葉に齟齬があるような・・・
今までIOモナドを直接使っていたコードをPolysemyを使うようにリファクタリングすることはできるよ。
エフェクトシステムの設計者たちはそれを推奨している。
でもそれは、IOライブラリのコードが弄れないから、仕方ないので、Polysemyで擬似的に弄ったように見せましょう、
という話では全くないよ。
272:デフォルトの名無しさん
20/04/25 17:18:59 zjFjVVvP.net
Polysemyってはじめてきいた
Extensible effectsとは別もの?
273:デフォルトの名無しさん
20/04/25 18:29:06.56 n1+IBCwB.net
>>269
名前が違うんだし、そりゃ別物だよ。
同じエフェクトシステムというカテゴリの一員ではあるが。
どう違うかは >>261 を読んで判断してくれ。
短い記事だからすぐ読める。
274:デフォルトの名無しさん
20/04/26 08:52:10 K9Hk9jTV.net
IOは副作用じゃなくて作用だからハスケルは副作用が無いんだなんていってるやつ初めて見たんだけど
275:デフォルトの名無しさん
20/04/26 09:58:35 igL2TSix.net
あらかじめ宣言した型に従う作用じゃなくて
宣言していないことを勝手にやるのが副作用の弊害だから
Haskellにはこの弊害が無いんだな
276:デフォルトの名無しさん
20/04/26 10:22:30 FBxVgLTh.net
>>272
そう言うこと。
でもIOは実質なんでもできちゃうから、かなり不安だよね。
もっとeffectを安全に取り扱いたいよね。
その解のひとつがPolysemyだよ、という話しだ。
>>271
PolysemyのブログPart1を読んで思うところがその嘲笑だけなら、
英語ドキュメントの読解にはちょっと向かないかな。
277:デフォルトの名無しさん
20/04/26 11:39:57 K9Hk9jTV.net
ブログを観る限り素人の書いたクソ記事だな
読む価値なし
278:デフォルトの名無しさん
20/04/26 14:00:45.22 igL2TSix.net
この毒舌が日本の平常運転
279:デフォルトの名無しさん
20/04/26 14:32:48.40 jQbFLCNe.net
Haskellの玄人って研究者とか?
280:デフォルトの名無しさん
20/04/26 17:02:22 i7pDRaTP.net
このスレ住人のことだよ
281:デフォルトの名無しさん
20/04/27 14:12:58.96 AM55pzUu.net
「Prelude>:browse」の実行結果をテキストファイルにリダイレクトする方法
browse.hsという名前のファイルに:browseを記入して保存
保存したファイルのあるディレクトリでコマンドプロンプトを立ち上げて以下を実行
stack ghci < browse.hs > browse.txt
Redirecting Haskell GHCi output to text file [duplicate]
URLリンク(stackoverflow.com)
282:デフォルトの名無しさん
20/04/27 17:47:14 AOepTdHn.net
このスレで延々と副作用やモナドの話ばかりされてるのなんか既視感があると思ったら、物理学板の相対論スレでポアンカレ群やリーマン幾何の話は一切せず
モノの本で読んだようなマイケルソン・モーレイの実験の話に関する持論をひたすら展開して相対論は間違ってる!って騒いでる連中に似てる
283:デフォルトの名無しさん
20/04/27 17:48:43 l27UEbbh.net
相対性理論も量子力学もどっちも間違ってる
284:デフォルトの名無しさん
20/04/27 18:04:41.79 3bdWQ9Vo.net
まあ副作用やモナドに関する理解の甘さは初心者にありがちだからな
285:デフォルトの名無しさん
20/04/27 19:40:47 .net
最新 stack で 7.8.4 をセットアップしようとしたら realgcc.exe を使おうとしてコケる
新しい GHC にはあるみたいだけど古い GHC には mingw\bin に存在しないようだ
なのに使おうとしている
なぜ古いのを入れようとしてるかというと競プロサイトのGHCが古いからだ
最新版で通るコードが向こうで弾かれたりして苛ついたから、じゃあそっちの環境で通るコードを提出してやるよとなってインストールを試みたのだ
スタックで古いバージョンのセットアップに自身ニキ、助けて
286:デフォルトの名無しさん
20/04/27 21:15:06.74 6TeRc6dT.net
静的型付けの話は一切せず
実行時の振る舞いに関する持論をひたすら展開してモナドがーって
これ半分オブジェクト指向だよ
型はオブジェクトではないから型の話を一切しないんだよ
287:デフォルトの名無しさん
20/04/27 22:39:13 .net
相対論スレもHaskellスレ同様に荒らされてるの?
288:デフォルトの名無しさん
20/04/28 00:09:34 Bz0WEXXQ.net
>>282
複数のバージョンを使い分けたいのなら、
Windowsは向かないと思います。
あくせくしてゴチャゴチャになるくらいなら、
さっさと仮想環境にlinux入れてそっちで環境構築した方が
楽で早いのではないでしょうか。
289:デフォルトの名無しさん
20/04/28 00:20:49 fQrwEc0Y.net
Haskellは何でああも副作用を嫌うの?
290:デフォルトの名無しさん
20/04/28 00:24:10 6HXykM7G.net
>>286
だから嫌ってない…
291:デフォルトの名無しさん
20/04/28 01:57:21.75 zsCbc70d.net
>>286
嫌うという表現は置いておくとして、
純粋関数と副作用の伴う関数とをあれほど切り分けたがるのは、
その方がメンテし易いというのが大きな理由の一つだと思う。
292:デフォルトの名無しさん
20/04/28 12:53:37 .net
よしわかった。ならば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:
URLリンク(docs.haskellstack.org)
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
神はどうあっても試練を与えようというあああああ!!!!
293:デフォルトの名無しさん
20/04/28 17:08:37 yBopWDZB.net
言語仕様はHaskellでもいいけど実装は、電池が入ってるインタプリタがいい
コンパイラをコンパイルするのも、ネットのサービス終了も嫌だ
294:デフォルトの名無しさん
20/04/28 22:24:50.85 fQrwEc0Y.net
F#ならスクリプト使えるよー
モナドの代わりにコンピューテーション式も使えるよ
副作用も使いまくりだよー
ライブラリーは.NETつかえるよー
GUIはちょっと苦手 でも、ワンレンボディコンのボインちゃん
シャッチョサン、シャッチョサン
シャッチョさんのことだからまけにまけて0円 もってけどろぼー
295:デフォルトの名無しさん
20/04/28 22:37:15 GL0e6TlJ.net
よし採用
296:デフォルトの名無しさん
20/04/29 06:50:08 .net
Elmっているこ?いらんこ?
297:デフォルトの名無しさん
20/04/29 07:13:41 SPs1sTfW.net
分からん
purescriptとかどうなんだろ
298:デフォルトの名無しさん
20/04/29 09:16:57.44 GLX6jWJt.net
agdaをjsにコンパイルするのはどうなの?
299:デフォルトの名無しさん
20/04/29 09:36:37 TuLha3Ht.net
F#スレ落ちてるね
300:デフォルトの名無しさん
20/04/29 10:44:15 JIRjVKl2.net
奴は四天王の中でも最弱
301:デフォルトの名無しさん
20/04/29 10:47:45.94 SPs1sTfW.net
5chごときにスレが立たないとは
魔族の面汚しよ・・・
302:デフォルトの名無しさん
20/04/29 15:25:39.64 Cpi+Il5+.net
>>289
漏れは、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 は、使えないのか?
303:298
20/04/29 15:39:17 Cpi+Il5+.net
ちなみに、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
304:デフォルトの名無しさん
20/04/29 15:47:47 ob+X7Nc0.net
的はずれなのでやめて
305:デフォルトの名無しさん
20/04/29 15:50:08 l6fPvkOQ.net
-lgmpができないならlibgmp-devをインストールすればいい
306:デフォルトの名無しさん
20/04/30 17:28:15 .net
>>299-300
んにゃぴ・・・んまぁ、そう、よくわかんなかったです
>>301
それでようやく原因が判りました
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 使いたいかって気分になってきて、エラー出たらその都度古いコードに書き直せばいいじゃんってなったんで
このイシューは閉じます。ありがとうございました。
307:デフォルトの名無しさん
20/04/30 17:28:45 .net
>>301じゃなくて>>302だった
308:デフォルトの名無しさん
20/05/02 07:49:02.53 +q7QtdZF.net
cabalってカバルじゃなくカボールなんだな
309:デフォルトの名無しさん
20/05/02 09:29:59.76 S0jsNVj+.net
haskellのライブラリ管理ツールはずっとクソ。
pythonのも大概だけど、haskellはそれを遥かに凌ぐレベルでくそ。
310:デフォルトの名無しさん
20/05/02 12:12:56 2Bfib/9h.net
そろそろocamlの時代じゃねーか?
311:デフォルトの名無しさん
20/05/02 12:50:23.34 F6qz2woZ.net
ライブラリ管理ツールって何をするためのモノなんだ?
ユーザーから何を期待されてるんだ?
312:デフォルトの名無しさん
20/05/02 13:54:24.62 QDKxMZyf.net
シェルスクリプトで管理ではなく
そろそろxmlとかyamlとかの時代を期待されてる説
313:デフォルトの名無しさん
20/05/04 03:20:08.08 tNWuxt0H.net
待ち遠しい「Algorithm Design with鵫askell」
URLリンク(www.cambridge.org)
314:デフォルトの名無しさん
20/05/04 16:45:39 R0S0SfqY.net
ocamlはせっかく盛り返してたのに失言でだいなし
315:デフォルトの名無しさん
20/05/04 23:50:02 Qeb7CV4E.net
どんな失言?
316:デフォルトの名無しさん
20/05/05 13:49:22.34 jdwgKTKz.net
haskellにライブラリ管理ツールなんて無いよね?
317:デフォルトの名無しさん
20/05/06 22:37:05 wUeYrIi1.net
釧路湿原
318:デフォルトの名無しさん
20/05/07 10:57:00 zCrpEpjK.net
書籍「関数プログラミング 珠玉のアルゴリズムデザイン」で分からない所があります。
2ページ目3行目
xsに含まれない最小の数は、filter (<= n) xs に含まれない最小の数ということになる。
ここで < ではなく、<= なのは何故でしょうか。
< を使って条件を厳しくしても、
xs = [0], n = 1 ===> filter (<n) xs = [0]
[0] に含まれない最小数 = 1
xs = [1], n = 1 ===> filter (<n) xs = []
[] に含まれない最小数 = 0
このように問題無いように思えます。
319:デフォルトの名無しさん
20/05/07 16:47:46 /pjDMUqX.net
事実を述べているだけに見えるが
何故あの事実ではなくこの事実を切り取ったのかを知りたがるのが面白い
320:デフォルトの名無しさん
20/05/07 17:22:10 mCGt79kv.net
>>315
その直前に
[0..(length xs)] の範囲にある数の少なくとも1つはxsに含まれていない
とあるので(鳩の巣原理)、その自然な帰結として
length xs より大きい数は、たとえxsに含まれていたとしても探索の対象にする必要はない
ということで filter (<= n) xs (where n = length xs) が出てくるのだと思う
そこで filter (<n) xs では意味がわからない(自明ではない)
321:デフォルトの名無しさん
20/05/08 15:02:16 H/a69LIv.net
仕事でhaskell使ってる人いる?
322:デフォルトの名無しさん
20/05/08 17:29:16 3cwUCrUk.net
>>310
表紙すごい買う気失わせる感じだけどほしいな
かむbりぷbのだーたアルゴリは名著多いし面白いのだといいな(´・ω・`)
323:デフォルトの名無しさん
20/05/08 18:31:16 HMlJY84s.net
>>318
使ってないけど、富士通かな?
川崎の案件で募集してたぞ。
324:デフォルトの名無しさん
20/05/09 06:20:07 djQF9o2a.net
>>320
金融系?
325:デフォルトの名無しさん
20/05/10 01:20:32 nxDhOjOb.net
>>317
理解できました。
ありがとうございました。
326:デフォルトの名無しさん
20/05/22 10:43:13.79 9QfQmUEB.net
URLリンク(wiki.haskell.org)
>Below are some notes for beginners on how to pronounce those strange Haskell operators and 'read' Haskell programs.
>>318
スレリンク(tech板:925番)-
327:デフォルトの名無しさん
20/05/23 00:35:45.46 PUmkxvlF.net
次のように、一つのモナドを遅延的に無限に評価できる関数 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]
328:デフォルトの名無しさん
20/05/23 01:33:43 m+h1wlWJ.net
>>324
コレは?
repMsub x = return(repeat x)
repM x = x>>=repMsub
main = do
xs<-repM (return 1)
print $ take 3 xs
329:デフォルトの名無しさん
20/05/23 01:44:01.25 m+h1wlWJ.net
あ、コッチの方がかっこいいのか?
でも可読性を犠牲にしだすとperlみたいになるから良くない?
repM = (>>=(return.repeat))
330:デフォルトの名無しさん
20/05/23 01:56:13 PUmkxvlF.net
>>325
>>326
それはひとつのモナドを3回評価しているのではなく、
ひとつのモナドの中の値を3回評価しているのではないでしょうか?
例えば repM (getLine >>= print) を評価すると、
1回しか getLine >>= print を評価しません。
ちなみに、IOモナドに限れば unsafeInterleaveIO 関数が使えます。
また、リストではなくいわゆるストリームなら出来ました。
ですが今はモナド全般に適用でき、リストのモナドを返す関数を求めています。
331:デフォルトの名無しさん
20/05/23 02:01:15 PUmkxvlF.net
>>325
すいません。
補足です。
a <- take 3 <$> repM (getLine >>= print) を評価すれば、
3回の副作用 getLine >>= print が実行され、
a は [(), (), ()] を束縛していて欲しいのです。
332:デフォルトの名無しさん
20/05/23 12:08:02 eKnPDQS2.net
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 (J