1 名前:デフォルトの名無しさん [2020/02/10(月) 18:17:36 ID:L6eYQqyh.net] 関数型プログラミング言語 Haskell について語るスレです。 Haskell Language(公式サイト) https://www.haskell.org/ 日本Haskellユーザーグループ - Haskell-jp https://haskell.jp/ 前スレ 関数型プログラミング言語Haskell Part32 https://mevius.5ch.net/test/read.cgi/tech/1548720347/
269 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 12:04:03 .net] 真のリファクタリングは、設計しなおしてソースコードも書き直す事が含まれるとすると 標準ライブラリであるIOモナドの設計やソースコードを直接弄ることはできませんから、ポリ蝉版は本当にIOを再設計したわけではなく、 リファクタリングを疑似的に再現したという解釈はできないでしょうか リファクタリングの真似事なのでエミュレートと言いました
270 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 12:44:25.69 ID:d+Khct7b.net] 現実問題として純粋関数だけじゃ成り立たないからね
271 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 13:20:46.87 ID:n1+IBCwB.net] >>266 なんか、私と貴方の間にリファクタリングという言葉に齟齬があるような・・・ 今までIOモナドを直接使っていたコードをPolysemyを使うようにリファクタリングすることはできるよ。 エフェクトシステムの設計者たちはそれを推奨している。 でもそれは、IOライブラリのコードが弄れないから、仕方ないので、Polysemyで擬似的に弄ったように見せましょう、 という話では全くないよ。
272 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 17:18:59 ID:zjFjVVvP.net] Polysemyってはじめてきいた Extensible effectsとは別もの?
273 名前:デフォルトの名無しさん mailto:sage [2020/04/25(土) 18:29:06.56 ID:n1+IBCwB.net] >>269 名前が違うんだし、そりゃ別物だよ。 同じエフェクトシステムというカテゴリの一員ではあるが。 どう違うかは >>261 を読んで判断してくれ。 短い記事だからすぐ読める。
274 名前:デフォルトの名無しさん [2020/04/26(日) 08:52:10 ID:K9Hk9jTV.net] IOは副作用じゃなくて作用だからハスケルは副作用が無いんだなんていってるやつ初めて見たんだけど
275 名前:デフォルトの名無しさん mailto:sage [2020/04/26(日) 09:58:35 ID:igL2TSix.net] あらかじめ宣言した型に従う作用じゃなくて 宣言していないことを勝手にやるのが副作用の弊害だから Haskellにはこの弊害が無いんだな
276 名前:デフォルトの名無しさん mailto:sage [2020/04/26(日) 10:22:30 ID:FBxVgLTh.net] >>272 そう言うこと。 でもIOは実質なんでもできちゃうから、かなり不安だよね。 もっとeffectを安全に取り扱いたいよね。 その解のひとつがPolysemyだよ、という話しだ。 >>271 PolysemyのブログPart1を読んで思うところがその嘲笑だけなら、 英語ドキュメントの読解にはちょっと向かないかな。
277 名前:デフォルトの名無しさん [2020/04/26(日) 11:39:57 ID:K9Hk9jTV.net] ブログを観る限り素人の書いたクソ記事だな 読む価値なし
278 名前:デフォルトの名無しさん mailto:sage [2020/04/26(日) 14:00:45.22 ID:igL2TSix.net] この毒舌が日本の平常運転
279 名前:デフォルトの名無しさん mailto:sage [2020/04/26(日) 14:32:48.40 ID:jQbFLCNe.net] Haskellの玄人って研究者とか?
280 名前:デフォルトの名無しさん mailto:sage [2020/04/26(日) 17:02:22 ID:i7pDRaTP.net] このスレ住人のことだよ
281 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 14:12:58.96 ID:AM55pzUu.net] 「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
282 名前:デフォルトの名無しさん [2020/04/27(月) 17:47:14 ID:AOepTdHn.net] このスレで延々と副作用やモナドの話ばかりされてるのなんか既視感があると思ったら、物理学板の相対論スレでポアンカレ群やリーマン幾何の話は一切せず モノの本で読んだようなマイケルソン・モーレイの実験の話に関する持論をひたすら展開して相対論は間違ってる!って騒いでる連中に似てる
283 名前:デフォルトの名無しさん [2020/04/27(月) 17:48:43 ID:l27UEbbh.net] 相対性理論も量子力学もどっちも間違ってる
284 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 18:04:41.79 ID:3bdWQ9Vo.net] まあ副作用やモナドに関する理解の甘さは初心者にありがちだからな
285 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 19:40:47 .net] 最新 stack で 7.8.4 をセットアップしようとしたら realgcc.exe を使おうとしてコケる 新しい GHC にはあるみたいだけど古い GHC には mingw\bin に存在しないようだ なのに使おうとしている なぜ古いのを入れようとしてるかというと競プロサイトのGHCが古いからだ 最新版で通るコードが向こうで弾かれたりして苛ついたから、じゃあそっちの環境で通るコードを提出してやるよとなってインストールを試みたのだ スタックで古いバージョンのセットアップに自身ニキ、助けて
286 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 21:15:06.74 ID:6TeRc6dT.net] 静的型付けの話は一切せず 実行時の振る舞いに関する持論をひたすら展開してモナドがーって これ半分オブジェクト指向だよ 型はオブジェクトではないから型の話を一切しないんだよ
287 名前:デフォルトの名無しさん mailto:sage [2020/04/27(月) 22:39:13 .net] 相対論スレもHaskellスレ同様に荒らされてるの?
288 名前:デフォルトの名無しさん mailto:sage [2020/04/28(火) 00:09:34 ID:Bz0WEXXQ.net] >>282 複数のバージョンを使い分けたいのなら、 Windowsは向かないと思います。 あくせくしてゴチャゴチャになるくらいなら、 さっさと仮想環境にlinux入れてそっちで環境構築した方が 楽で早いのではないでしょうか。
289 名前:デフォルトの名無しさん mailto:sage [2020/04/28(火) 00:20:49 ID:fQrwEc0Y.net] Haskellは何でああも副作用を嫌うの?
290 名前:デフォルトの名無しさん mailto:sage [2020/04/28(火) 00:24:10 ID:6HXykM7G.net] >>286 だから嫌ってない…
291 名前:デフォルトの名無しさん mailto:sage [2020/04/28(火) 01:57:21.75 ID:zsCbc70d.net] >>286 嫌うという表現は置いておくとして、 純粋関数と副作用の伴う関数とをあれほど切り分けたがるのは、 その方がメンテし易いというのが大きな理由の一つだと思う。
292 名前:デフォルトの名無しさん mailto:sage [2020/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: 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 神はどうあっても試練を与えようというあああああ!!!!
293 名前:デフォルトの名無しさん mailto:sage [2020/04/28(火) 17:08:37 ID:yBopWDZB.net] 言語仕様はHaskellでもいいけど実装は、電池が入ってるインタプリタがいい コンパイラをコンパイルするのも、ネットのサービス終了も嫌だ
294 名前:デフォルトの名無しさん mailto:sage [2020/04/28(火) 22:24:50.85 ID:fQrwEc0Y.net] F#ならスクリプト使えるよー モナドの代わりにコンピューテーション式も使えるよ 副作用も使いまくりだよー ライブラリーは.NETつかえるよー GUIはちょっと苦手 でも、ワンレンボディコンのボインちゃん シャッチョサン、シャッチョサン シャッチョさんのことだからまけにまけて0円 もってけどろぼー
295 名前:デフォルトの名無しさん mailto:sage [2020/04/28(火) 22:37:15 ID:GL0e6TlJ.net] よし採用
296 名前:デフォルトの名無しさん mailto:sage [2020/04/29(水) 06:50:08 .net] Elmっているこ?いらんこ?
297 名前:デフォルトの名無しさん mailto:sage [2020/04/29(水) 07:13:41 ID:SPs1sTfW.net] 分からん purescriptとかどうなんだろ
298 名前:デフォルトの名無しさん mailto:sage [2020/04/29(水) 09:16:57.44 ID:GLX6jWJt.net] agdaをjsにコンパイルするのはどうなの?
299 名前:デフォルトの名無しさん [2020/04/29(水) 09:36:37 ID:TuLha3Ht.net] F#スレ落ちてるね
300 名前:デフォルトの名無しさん mailto:sage [2020/04/29(水) 10:44:15 ID:JIRjVKl2.net] 奴は四天王の中でも最弱
301 名前:デフォルトの名無しさん mailto:sage [2020/04/29(水) 10:47:45.94 ID:SPs1sTfW.net] 5chごときにスレが立たないとは 魔族の面汚しよ・・・
302 名前:デフォルトの名無しさん mailto:sage [2020/04/29(水) 15:25:39.64 ID: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 mailto:sage [2020/04/29(水) 15:39:17 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/04/29(水) 15:47:47 ID:ob+X7Nc0.net] 的はずれなのでやめて
305 名前:デフォルトの名無しさん mailto:sage [2020/04/29(水) 15:50:08 ID:l6fPvkOQ.net] -lgmpができないならlibgmp-devをインストールすればいい
306 名前:デフォルトの名無しさん mailto:sage [2020/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 名前:デフォルトの名無しさん mailto:sage [2020/04/30(木) 17:28:45 .net] >>301 じゃなくて>>302 だった
308 名前:デフォルトの名無しさん mailto:sage [2020/05/02(土) 07:49:02.53 ID:+q7QtdZF.net] cabalってカバルじゃなくカボールなんだな
309 名前:デフォルトの名無しさん mailto:sage [2020/05/02(土) 09:29:59.76 ID:S0jsNVj+.net] haskellのライブラリ管理ツールはずっとクソ。 pythonのも大概だけど、haskellはそれを遥かに凌ぐレベルでくそ。
310 名前:デフォルトの名無しさん mailto:sage [2020/05/02(土) 12:12:56 ID:2Bfib/9h.net] そろそろocamlの時代じゃねーか?
311 名前:デフォルトの名無しさん mailto:sage [2020/05/02(土) 12:50:23.34 ID:F6qz2woZ.net] ライブラリ管理ツールって何をするためのモノなんだ? ユーザーから何を期待されてるんだ?
312 名前:デフォルトの名無しさん mailto:sage [2020/05/02(土) 13:54:24.62 ID:QDKxMZyf.net] シェルスクリプトで管理ではなく そろそろxmlとかyamlとかの時代を期待されてる説
313 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 03:20:08.08 ID:tNWuxt0H.net] 待ち遠しい「Algorithm Design withHaskell」 https://www.cambridge.org/core/books/algorithm-design-with-haskell/824BE0319E3762CE8BA5B1D91EEA3F52
314 名前:デフォルトの名無しさん [2020/05/04(月) 16:45:39 ID:R0S0SfqY.net] ocamlはせっかく盛り返してたのに失言でだいなし
315 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 23:50:02 ID:Qeb7CV4E.net] どんな失言?
316 名前:デフォルトの名無しさん mailto:sage [2020/05/05(火) 13:49:22.34 ID:jdwgKTKz.net] haskellにライブラリ管理ツールなんて無いよね?
317 名前:デフォルトの名無しさん mailto:sage [2020/05/06(水) 22:37:05 ID:wUeYrIi1.net] 釧路湿原
318 名前:デフォルトの名無しさん mailto:sage [2020/05/07(木) 10:57:00 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/05/07(木) 16:47:46 ID:/pjDMUqX.net] 事実を述べているだけに見えるが 何故あの事実ではなくこの事実を切り取ったのかを知りたがるのが面白い
320 名前:デフォルトの名無しさん mailto:sage [2020/05/07(木) 17:22:10 ID:mCGt79kv.net] >>315 その直前に [0..(length xs)] の範囲にある数の少なくとも1つはxsに含まれていない とあるので(鳩の巣原理)、その自然な帰結として length xs より大きい数は、たとえxsに含まれていたとしても探索の対象にする必要はない ということで filter (<= n) xs (where n = length xs) が出てくるのだと思う そこで filter (<n) xs では意味がわからない(自明ではない)
321 名前:デフォルトの名無しさん mailto:sage [2020/05/08(金) 15:02:16 ID:H/a69LIv.net] 仕事でhaskell使ってる人いる?
322 名前:デフォルトの名無しさん [2020/05/08(金) 17:29:16 ID:3cwUCrUk.net] >>310 表紙すごい買う気失わせる感じだけどほしいな かむbりぷbのだーたアルゴリは名著多いし面白いのだといいな(´・ω・`)
323 名前:デフォルトの名無しさん mailto:sage [2020/05/08(金) 18:31:16 ID:HMlJY84s.net] >>318 使ってないけど、富士通かな? 川崎の案件で募集してたぞ。
324 名前:デフォルトの名無しさん mailto:sage [2020/05/09(土) 06:20:07 ID:djQF9o2a.net] >>320 金融系?
325 名前:デフォルトの名無しさん mailto:sage [2020/05/10(日) 01:20:32 ID:nxDhOjOb.net] >>317 理解できました。 ありがとうございました。
326 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 10:43:13.79 ID:9QfQmUEB.net] https://wiki.haskell.org/Pronunciation >Below are some notes for beginners on how to pronounce those strange Haskell operators and 'read' Haskell programs. >>318 https://mevius.5ch.net/test/read.cgi/tech/1548720347/925-
327 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 00:35:45.46 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 01:33:43 ID:m+h1wlWJ.net] >>324 コレは? repMsub x = return(repeat x) repM x = x>>=repMsub main = do xs<-repM (return 1) print $ take 3 xs
329 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 01:44:01.25 ID:m+h1wlWJ.net] あ、コッチの方がかっこいいのか? でも可読性を犠牲にしだすとperlみたいになるから良くない? repM = (>>=(return.repeat))
330 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 01:56:13 ID:PUmkxvlF.net] >>325 >>326 それはひとつのモナドを3回評価しているのではなく、 ひとつのモナドの中の値を3回評価しているのではないでしょうか? 例えば repM (getLine >>= print) を評価すると、 1回しか getLine >>= print を評価しません。 ちなみに、IOモナドに限れば unsafeInterleaveIO 関数が使えます。 また、リストではなくいわゆるストリームなら出来ました。 ですが今はモナド全般に適用でき、リストのモナドを返す関数を求めています。
331 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 02:01:15 ID:PUmkxvlF.net] >>325 すいません。 補足です。 a <- take 3 <$> repM (getLine >>= print) を評価すれば、 3回の副作用 getLine >>= print が実行され、 a は [(), (), ()] を束縛していて欲しいのです。
332 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 12:08:02 ID: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
333 名前:ust 1) .| CL.take 3 print x5 -- Just [1,1,1] let x6 = runConduit $ repM Nothing .| CL.take 3 print (x6 :: Maybe [Int]) -- Nothing [] [ここ壊れてます]
334 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 13:15:18.54 ID:eKnPDQS2.net] あ、ストリームでできたってこういうことか
335 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 19:39:02 ID:A0PpU4F1.net] HaskellのフレームワークってGHC拡張たくさん使われてるから、基本的な文法だけ知ってても、エラーが出たら意味分からなくなるという初心者泣かせな言語だな。地道にコツコツ知らないことを勉強してってるわ。 使いこなしてる人ホンマ羨ましい。
336 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 22:41:15 ID:oexHBYog.net] The state of GHC on ARM https://www.haskell.org/ghc/blog/20200515-ghc-on-arm.html
337 名前:デフォルトの名無しさん [2020/05/25(月) 14:19:28 ID:HRWjfAZ+.net] >>331 そういう悪い所を悪いと言えないのが初心者で 初心者の甘い評価がなければ持続不可能なのがGHCじゃないか
338 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 19:07:59 ID:b4izxg0D.net] むしろ俺は段階的に学べていいと思ったが
339 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 13:27:47.52 ID:w7oGlmub.net] haskellのフレームワークとやらが具体的に何を指しているのか分からん。 YesodやServantなどのWebフレームワークしか思いつかんが。 いずれにしても、そもそも初心者がフレームワークに頼るべきではない。 初心者を抜けて、さぁ本格的なアプリでも作ってみるかとなった時に使えばいい。 初心者は15パズルやTODOツールみたいな簡単なアプリをフルスクラッチで作ってみて、 言語拡張の必要性や、有用なライブラリの使い方を少しずつ学ぶことを奨める。
340 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 11:14:49 ID:xJStjlCD.net] そういうのはつまらんのだよ
341 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 13:16:13 ID:SIsgBJ88.net] >>336 初心者が面白いと思える学べる題材ってなんかあるかな? C#だとゲームとかGUIとか簡単なのになぁ Pythonだって色々思い浮かぶのに
342 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 17:32:08 ID:Ro2X8Fae.net] プロジェクトオイラーでもやったら
343 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 00:14:38.34 ID:Hx2r4buk.net] haskell興味あるのですがhaskellの長所と短所ってなんですかる
344 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 00:57:51.48 .net] 若さと情熱に身を任せたいなら C、衰えても続けたいなら Haskell
345 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 07:22:48 ID:mJaFRwIH.net] GoとRustが無かった時代には長所がいっぱいあったんだろう もし、その時代のコードを変更することなく今使えるならそれも長所だが
346 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 07:54:35.82 ID:7l9AMad4.net] >>339 長所は難しいことをより難しく書けること 短所は簡単なことでも難しく書かざるを得ないこと 本質的に純粋関数だけじゃリリースできないことも大問題ではある 切り分けで対処しても破壊を含むコードは必ず走る 理想が現実に敗北したような体系だから手を出さないほうがいいよ
347 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 08:30:23.80 ID:wwuYcwOw.net] >>339 長所は、宣言的に分かりやすく書いたプログラムが意図通りにちゃんと動くことです。 何をするのかと、どのようにするのか、この二者をきっちり分けてプログラムできるのがHaskellの大きな魅力です。 (できると言っても、初心者が簡単にできることではありません。 その方向に正しく精進する必要があります。) 短所は、少し上のレスでも言及されていますが、入門を抜けた後に何に取り組めば良いのか分からなくなることです。 始めから何か目的があってHaskellを学び始めたのでしたら良いのですが、そうでなければ、 魅力的な題材の無さに愕然とし、路頭に迷うことになるでしょう。 実はgithub等を漁れば先輩方の様々はジャンルの非常に参考になるプログラムを数多く拝見でき、 自分も取り組んでみたくなる題材がたくさん見つかるのですが、逆に言えばそうやって努力して探さないと見つかりません。
348 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 09:57:17 ID:zRWEM9Qa.net] >>342 後半、そういう批判よくあるけど毎回何言ってんのかよくわからん お前達は何を批判してるの?
349 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 10:24:25.66 ID:mJaFRwIH.net] 過激派と思ってた奴に中道の仕事を奪われる 理論的にありえないと思っていた中道と中道の対立が現実になる
350 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 11:22:41 ID:xO3kN7Ry.net] どんなに多くの短所があろうが それらに勝る長所が一つあれば好きになる 人でもプログラミング言語でも
351 名前:デフォルトの名無しさん [2020/05/29(金) 11:35:07 ID:OBuVVMWP.net] >>339 Haskellに対して懐疑的だった初学者がParsec使ってパーサー書いてみた感じだと 長所 バグ皆無のパーサーをBNFを書き写すように簡潔に書ける (自分はCやrubyでは書けなかった) 問題に応じて言語内言語を作れるので、コードの量を極めて少なくできる 短所 yaccやbisonより学ぶのにかなり時間がかかりそう 言語内言語を作れてしまうので、ぱっと見ただけではコードを理解できない (数式を理解するには記号の意味を理解している必要があるのと同じ) yaccやbisonを使った経験は無い だが、Haskellの方が応用が利き問題の解決の仕方が美しいので学びたいとは思わなくなった 解決したい具体的な問題があり、自分が学んできた言語だとコードが大きく複雑になりそうで、新しい概念を学ぶ余裕と覚悟があるなら良いと思う ただ便利そうなのを探してるとか興味があるってだけだと挫折するかも Haskellを参考にしたより新しい言語を学ぶ方がスマートかもしれない 自分みたいにHaskellに懐疑的で徹底的に学んで悪口書いてやろうと思っているならマジお勧めwww
352 名前:デフォルトの名無しさん mailto:sage [2020/05/30(土) 19:36:21.64 ID:/U1uledC.net] >>339 長所: 多くのバグをコンパイル時に潰せる 短所: 手続き型プログラミングにおける既知の資産(アルゴリズムなど)が活用しにくい
353 名前:デフォルトの名無しさん mailto:sage [2020/06/01(月) 05:07:50.77 ID:seoK/8uJ.net] Ocamlを使わないといけなくなっていじり始めたけど、あれもこれも出来なくて不便だな やたら冗長になるし…
354 名前:デフォルトの名無しさん [2020/06/01(月) 07:39:57.03 ID:L1Mt0gVE.net] 書くのが不便になる代わりに、ぱっと見ただけで理解できるコードになる という軍師の言葉をぱっと見ただけで信じる者だけがOCamlを使いなさい
355 名前:デフォルトの名無しさん mailto:sage [2020/06/01(月) 08:15:03 ID:dkkr+KCk.net] >>349 できないことの例を教えてください
356 名前:デフォルトの名無しさん mailto:sage [2020/06/02(火) 01:46:24.39 ID:UWOmEsh4.net] >>329 >>330 やはり純粋なリストだけでは望む仕組みは作れないという結論に達しました。 逆に言えば、そういう事が容易にできるのがストリームの利点の一つなのだと理解しました。 ありがとうございました。
357 名前:デフォルトの名無しさん mailto:sage [2020/06/05(金) 23:44:13.56 ID:aqmhehrv.net] memptyってなんでmunitやmidとかじゃないんだろうな? emptyの心がよーわからん 文字列のように意味的に空なモノイドもあるが、 空じゃない例の方が圧倒的に多く一般的じゃないか? ま、どうでもいいんだけどな
358 名前:デフォルトの名無しさん mailto:sage [2020/06/06(土) 08:31:53.87 .net] let nop = mempty in ...ってやってる(嘘)
359 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 18:32:52.39 ID:vPvQB3B1.net] top level の型の指定についての質問です。 haskellのルールでtop levelでないところでは曖昧な型で型推論してくれて通るけど、top levelでは一意に型が決まらないとダメとかなんとかそういうルールがあって、 それでハマって苦労した記憶があるんですが、今その事ふっと思い出したんですが、詳しい内容が思い出せません。 haskell ambiguous top level とかでグクってもそれらしい話しが出てこないんですけど、なんか思い当たる方おられませんか?
360 名前:デフォルトの名無しさん mailto:sage [2020/06/11(木) 20:57:26 ID:h7Wncfkb.net] >>355 どういうことか、何か例を挙げることはできますか?
361 名前:デフォルトの名無しさん mailto:sage [2020/06/11(木) 23:57:59 ID:oU50Re4d.net] >>356 レスありがとうございます。 当時なんかのプログラム組んでてハマったんですが、どんな例だったかは思い出せません。 しかし制限の名前はわかりました。 monomorphic restriction (単相性制限) という奴でした。 ググってみると多相性を無制限に認めてしまうとメモ化の実装が難しくなるようで性能に影響してしまう事を避けるための制限のようです。 こまめに型宣言書くようにするか、性能を犠牲にしてもよいなら制限をなくすオプションとかもghcとかには用意されてるので実害は無いんですけど、昔ハマって原因突き止めるのにエライ苦労したのでなんだったかふっと気になってお聞きしました。 お騒がせしました。
362 名前:デフォルトの名無しさん mailto:sage [2020/06/12(金) 03:07:06 ID:YpUxhodA.net] >>357 いえ、お気になさらず。 こちらも勉強になりました。
363 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 10:17:27.94 ID:6v+H5Lhm.net] 今、最新のghcでdependent typesは使えますか?
364 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 00:33:49.50 ID:2ZCsz0wY.net] 次の2つの関数の型の違いを説明していただけないでしょうか。 f :: C a => T a -> b -> b g :: T a -> (C a => b) -> b 関数gのようなconstraintの使い方にはこのような効果や意味がある、 とはっきり説明できず、モヤモヤしています。 また、このようなconstraintの使い方には特別な用語があるのでしょうか。 webで検索して調べてはいますが、適切なキーワードが思いつかず、苦労しています。
365 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 16:04:56.51 ID:FJC3hMrg.net] Haskell用語だけでは説明できない気がする C++用語で a -> bのaとbはtemplateを実体化する引数 C a => bはtemplateの宣言であって実体化ではないのでgは意味がわからない
366 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 01:53:39.90 .net] Steamで買えるHaskell製ゲームを教えて
367 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 10:31:17 ID:hu4PmWPn.net] >>361 レスありがとうございます。 すいません、C++に精通していないため、templateの実体化や宣言の意味がよく分かりません。 件の関数型は次のブログにありました。 Introduction to Singletons (Part 1) https://blog.jle.im/entry/introduction-to-singletons-1.html#going-backwards ここの Going backwards の節です。 (昔、別のWebページでも見て、その時も不思議に思っていたのですが、どこのページだったか忘れてしまいました) そこでは withSingDSI :: SingDS s -> (SingDSI s => r) -> r という型です。 確かに SingDSI s => のconstraintを外すと、この関数を呼び出すところで型エラーとなってコンパイルできません。 代わりに、型シグネチャの先頭に SingDSI s => を書いたとしても、です。 しかし、なぜ型が合わないのか理由が分かりません。 何かしらの意味があるはずなのですが・・・
368 名前:デフォルトの名無しさん mailto:sage [2020/06/29(月) 23:47:59.12 ID:MeiET0BU.net] >>363 のリンク先の話は中々勉強になるなぁ。 自分でこんなの使いこなせるようになるとは思えないけど。
369 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 23:40:38 ID:Rg/xVuvf.net] >>360 Haskell勉強中で答えられるほどの知識無いけど constraintの意味から察するに、右の引数の型が正格評価されていないうちには受け入れないということでは 遅延的に型を選択して返すような関数は作れるけど、それを明示せずに正格評価の関数に渡せてしまうと追跡困難になる 引数の型を決定しておかないと渡せないようになってるんじゃないかな つまり、前者は第一引数の型を指定してて、後者は第二引数の型を指定しているというだけだと思う 知らんけど