関数型プログラミング言語Haskell Part34 (667レス)
関数型プログラミング言語Haskell Part34 http://mevius.5ch.net/test/read.cgi/tech/1639713446/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
177: デフォルトの名無しさん [sage] 2022/12/30(金) 19:21:21.60 ID:dTZ5gB6H Haskellはすでに見放されてる感ある http://mevius.5ch.net/test/read.cgi/tech/1639713446/177
178: デフォルトの名無しさん [] 2023/01/02(月) 01:15:52.75 ID:jETc9FsM >>177 そうなの?それは実務的な意味で? http://mevius.5ch.net/test/read.cgi/tech/1639713446/178
179: デフォルトの名無しさん [] 2023/01/02(月) 03:01:15.30 ID:/m9PT5PE ステマが酷すぎた。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/179
180: デフォルトの名無しさん [] 2023/01/02(月) 03:01:59.29 ID:/m9PT5PE 言いなおそう。 某出版社のステマが酷すぎた。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/180
181: デフォルトの名無しさん [] 2023/01/03(火) 00:10:20.46 ID:7mh2KVDC 見放されるようになったのは、 モナドってなに?というミステリアスで興味深い問いがいつのまにか 白けた話になったからじゃないか。もうどうでもいいというか。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/181
182: デフォルトの名無しさん [] 2023/01/03(火) 04:29:29.65 ID:yYGSV1g6 技術評論社のせいでは? http://mevius.5ch.net/test/read.cgi/tech/1639713446/182
183: デフォルトの名無しさん [sage] 2023/01/04(水) 05:08:58.65 ID:peYJ5uzH メンテナーが次々と逃げ出してるのが象徴的・・ わかりやすいコードを書くとすこぶるパフォーマンス悪いし だからといって頑張ると一体これは何をしたいのだってなる 遅延評価がデフォルトなのも非常にまずいし 正格評価と切り分けて結局は書かなければならずまだまだ発展途上だと感じる いっそのこと正格評価はなしとした方がいっそ清々しい http://mevius.5ch.net/test/read.cgi/tech/1639713446/183
184: デフォルトの名無しさん [] 2023/01/04(水) 18:10:50.86 ID:HUTbVNXS PureScriptに移行しようぜ 正格評価で使いやすいし http://mevius.5ch.net/test/read.cgi/tech/1639713446/184
185: デフォルトの名無しさん [sage] 2023/01/05(木) 03:59:19.12 ID:PBBtO4Nd しかし無限数列とか表現できなくなるのがなぁ http://mevius.5ch.net/test/read.cgi/tech/1639713446/185
186: デフォルトの名無しさん [sage] 2023/01/05(木) 12:24:48.41 ID:dQdtWkz5 あんなもの現実には扱えないからな 適当な数値を上限にしとけばいいだけ http://mevius.5ch.net/test/read.cgi/tech/1639713446/186
187: デフォルトの名無しさん [sage] 2023/01/05(木) 13:19:36.00 ID:PBBtO4Nd イヤ、“表現できる”ってとこに意味があるんだよ http://mevius.5ch.net/test/read.cgi/tech/1639713446/187
188: デフォルトの名無しさん [sage] 2023/01/05(木) 14:40:58.83 ID:dQdtWkz5 その割にデメリットの方が大きすぎる やはりいらないよ http://mevius.5ch.net/test/read.cgi/tech/1639713446/188
189: デフォルトの名無しさん [] 2023/01/14(土) 23:43:44.49 ID:vLwyb8f9 PureScriptと被ってるかな? [GHC 9.6.1-alpha1 is now available - Announcements - Haskell Community](https://discourse.haskell.org/t/ghc-9-6-1-alpha1-is-now-available/5585) http://mevius.5ch.net/test/read.cgi/tech/1639713446/189
190: デフォルトの名無しさん [sage] 2023/01/17(火) 00:55:50.42 ID:zIKNxshB 無限の長さの [a] を仮に廃止して他の言語と同じような方式に変えたら IO a のような型になる 生物学とか好きそうな人達は [a] と IO a の差が致命的 (つまり一方は死ぬが他方は生き残る) と決めつける傾向がある http://mevius.5ch.net/test/read.cgi/tech/1639713446/190
191: デフォルトの名無しさん [sage] 2023/01/17(火) 01:31:37.81 ID:PP1OxyD+ 生物学関係ないな http://mevius.5ch.net/test/read.cgi/tech/1639713446/191
192: デフォルトの名無しさん [sage] 2023/01/17(火) 03:13:49.00 ID:zIKNxshB 言語は死なないとか復活させればいいだけとか思うならもう生物学関係ない そう思わないなら関係ありそう http://mevius.5ch.net/test/read.cgi/tech/1639713446/192
193: デフォルトの名無しさん [sage] 2023/01/17(火) 08:07:29.90 ID:Inpyi8aQ 無意味な比喩表現 http://mevius.5ch.net/test/read.cgi/tech/1639713446/193
194: デフォルトの名無しさん [sage] 2023/01/19(木) 01:20:46.84 ID:cE+DUb2P クラウドは中に人がいるのか無人なのか調べられないので 人間と機械を混同したのではなく不確実にした http://mevius.5ch.net/test/read.cgi/tech/1639713446/194
195: デフォルトの名無しさん [sage] 2023/01/19(木) 07:47:39.45 ID:7wHhBGeN 意味不明 もう少し文章を書く練習をしろ http://mevius.5ch.net/test/read.cgi/tech/1639713446/195
196: デフォルトの名無しさん [sage] 2023/01/19(木) 17:42:25.26 ID:ugYwIpAQ 嘘を書くのをやめろって言われない努力はしてる 現に、嘘だと言われない http://mevius.5ch.net/test/read.cgi/tech/1639713446/196
197: デフォルトの名無しさん [sage] 2023/01/19(木) 20:45:58.03 ID:LuniV29G 間違ってさえいない文章 真偽以前に中身がない http://mevius.5ch.net/test/read.cgi/tech/1639713446/197
198: デフォルトの名無しさん [sage] 2023/01/19(木) 20:49:17.03 ID:LuniV29G それっぽいだけで少し読めば大したことすら書かれてないのがわかる http://mevius.5ch.net/test/read.cgi/tech/1639713446/198
199: デフォルトの名無しさん [sage] 2023/01/19(木) 21:18:32.97 ID:ugYwIpAQ 「わかる」と「意味不明」は矛盾しそう どっちかが嘘ついるのでは http://mevius.5ch.net/test/read.cgi/tech/1639713446/199
200: デフォルトの名無しさん [sage] 2023/01/19(木) 21:33:25.41 ID:QROh3L3M >>199 お前読解力もないのか もうこのスレ来るなよ http://mevius.5ch.net/test/read.cgi/tech/1639713446/200
201: デフォルトの名無しさん [sage] 2023/01/19(木) 21:38:24.06 ID:CHvJHSS4 お前も反応すんなよ http://mevius.5ch.net/test/read.cgi/tech/1639713446/201
202: デフォルトの名無しさん [sage] 2023/01/20(金) 01:52:23.49 ID:jpIFaaML いくら話題がないからって http://mevius.5ch.net/test/read.cgi/tech/1639713446/202
203: デフォルトの名無しさん [sage] 2023/01/21(土) 13:30:02.33 ID:ms4pFp6J 職業倫理が苦手です http://mevius.5ch.net/test/read.cgi/tech/1639713446/203
204: デフォルトの名無しさん [sage] 2023/01/21(土) 16:31:20.60 ID:c9rqNig0 スレチ http://mevius.5ch.net/test/read.cgi/tech/1639713446/204
205: デフォルトの名無しさん [sage] 2023/01/29(日) 20:58:33.14 ID:3238s/rq 教科書の通りなのになんでエラーになるんだろう? code: fork :: (a->b, a->c) -> a -> (b, c) fork (f, g) h = fork (f h, g h) main :: IO () main = do print $ fork (map fst, map snd) (zip [0 .. 4] "hallo") Output: Error occurred ERROR line 2 - Type error in explicitly typed binding *** Term : fork *** Type : (a -> b -> c,a -> b -> d) -> a -> b -> (c,d) *** Does not match :
(a -> b -> c,a -> b -> d) -> a -> (b -> c,b -> d) http://mevius.5ch.net/test/read.cgi/tech/1639713446/205
206: デフォルトの名無しさん [sage] 2023/01/30(月) 02:11:06.80 ID:jVdK8GQm >>205 fork (f, g) h = (f h, g h) では? http://mevius.5ch.net/test/read.cgi/tech/1639713446/206
207: デフォルトの名無しさん [sage] 2023/01/30(月) 04:31:24.57 ID:KsiNNj/4 >>206 ありがとうございます。その通りでした。 code: pair :: (a->b, a->c) -> a -> (b, c) pair (f, g) x = (f x, g x) fork :: (a->b, a->c) -> a -> (b, c) fork (f, g) h = pair (f, g) h main :: IO () main = do print $ fork (map fst, map snd) (zip [0 .. 4] "hallo") Output: -- ([0,1,2,3,4],"hallo") これで上手く動いたので報告しておこうと思ったら、同じことを2時間以上も前に... oTL http://meviu
s.5ch.net/test/read.cgi/tech/1639713446/207
208: デフォルトの名無しさん [sage] 2023/02/01(水) 14:35:45.13 ID:RAEJFXsc Haskell使い(でLinux使い)の皆さんってxmonad使ってますか? ウィンドウフォーカスを切り替えるときにfloatingウィンドウは無視するようにしたいです。 オリジナルのfocusUp'関数は focusUp' :: Stack a -> a focusUp' (Stack t (l:ls) rs) = Stack l ls (t:rs) focusUp' (Stack t [] rs) = Stack x xs [] where (x :| xs) = NE.reverse (t :| rs) と大変記述量の少ない作りになってるのですが、これに最小の変更を加えて目的を実現するとしたらどうするべきでしょ
うか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/208
209: デフォルトの名無しさん [sage] 2023/02/17(金) 00:17:58.82 ID:x2uQcODA ChatGPTにいろんなサンプル書かせて勉強させてもらってるわ http://mevius.5ch.net/test/read.cgi/tech/1639713446/209
210: デフォルトの名無しさん [sage] 2023/02/18(土) 07:53:47.68 ID:pwjCq/Fb >>208ですがスレチですかね Linux板のタイル型WMスレに移動させていただきます (全く動いてないスレなのでダメ元ですが……) http://mevius.5ch.net/test/read.cgi/tech/1639713446/210
211: デフォルトの名無しさん [] 2023/02/23(木) 22:53:40.11 ID:3VcdShfb すみません 凄いHを楽しく学ぶ本を復習していて 疑問に思って試してみたのですが 具体的な型が決まらない値(単独変数で)は 下記の(Maybeや配列)の他にどんなのがありますでしょうか。 v1 :: Maybe a v1 = Nothing v2 :: [a] v2 = [] 型拘束を使わない型変数を使って ある単独変数の型を定義できない物かと思いました。 また関数でも具体的な型が決まらない値を返す 関数はありますでしょうか。 (Nothingや空リスト以外で) http://mevius.5ch.net/test/read.cgi/t
ech/1639713446/211
212: デフォルトの名無しさん [sage] 2023/02/24(金) 02:14:24.44 ID:PIH/rCf2 >>211 Bing チャットに聞いたらこんなのが返ってきた。参考になるかな。 型変数を含むデータ型の例としては、関数型、代数的データ型、型クラスなどがあります。 例: data Tree a = Leaf a | Node (Tree a) (Tree a) この代数的データ型Treeは任意の型aを要素とする二分木を表します。 例: class Eq a where (==) :: a -> a -> Bool (/=) :: a -> a -> Bool この型クラスEqは任意の型aに対して等値性を定義するための仕組みです。 http://mevius.5ch
.net/test/read.cgi/tech/1639713446/212
213: デフォルトの名無しさん [sage] 2023/02/25(土) 11:21:45.77 ID:h/PI1ikt >>212 ありがとうございます。 凄いHを楽しく学ぶ本にも Tree型があったので試してみました。 具体的な中身が「無い」事を現す値の場合 型引数で定義できるみたいです。 data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show) v3 :: Tree a v3 = EmptyTree http://mevius.5ch.net/test/read.cgi/tech/1639713446/213
214: デフォルトの名無しさん [] 2023/04/29(土) 14:07:24.45 ID:AoTbqg9O マルチポストだが教えてくれ 【追記あり】ChatGPTじゃなくて人力でモナドが発明された経緯を適当に調べた(ソース付き)。 https://qiita.com/iHdkz/items/e7a59eef034ab6d0fdc2 この記事正しいの?こんな話聞いたこともないし。圏論でモジュール性なんて扱えるの? http://mevius.5ch.net/test/read.cgi/tech/1639713446/214
215: デフォルトの名無しさん [sage] 2023/05/01(月) 00:30:45.06 ID:PDTetkfq >>214 よく分からんけど「モナドが発明された経緯」ではないな 1971年の本ですでにモナドについて書かれてるようだし en.wikipedia.org/wiki/Categories_for_the_Working_Mathematician http://mevius.5ch.net/test/read.cgi/tech/1639713446/215
216: デフォルトの名無しさん [sage] 2023/05/03(水) 20:58:10.10 ID:ioA1phJ7 >>214 英語で調べてもそんな話出てきたことはないな。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/216
217: デフォルトの名無しさん [sage] 2023/05/03(水) 21:14:18.69 ID:ioA1phJ7 これにもそんなストーリー書いてない https://pdfs.semanticscholar.org/59d7/a0f5c341ab450e2893eb73384895524bbebd.pdf http://mevius.5ch.net/test/read.cgi/tech/1639713446/217
218: デフォルトの名無しさん [sage] 2023/06/09(金) 14:58:05.85 ID:GYy2ex4t lispやらカリー=ハワード同型やらの関連性は 数学的な意味では遥か前だし実装上の話かな https://en.m.wikipedia.org/wiki/Timeline_of_category_theory_and_related_mathematics http://mevius.5ch.net/test/read.cgi/tech/1639713446/218
219: デフォルトの名無しさん [sage] 2023/06/20(火) 00:30:03.89 ID:qm9+2t5E do 記法でのメモ化について質問です 例えば do let x <- someComplexExpression print $ f x print $ g x のようなコードがあったとしてxの値はf xの評価の時点とg xの評価の時点で2回別々にされますか? 少なくともHaskell2010 Lang. Rep. (以下HLR2010)ではこのような場合メモ化されて2回展開されることはないという記述を見つけることはできませんでした なので公式にはこのような記述だと2回展開されると思わなければいけないのだと思います ではsomeComplexExp
ressionを先に展開してから、展開したものをxにbindするにはどうすれば良いのでしょうか? HLR2010ではswqを使えば良いとあるのですがこの場合 x <- seq someComplexExpression someComplexExpression とかでうまく行くんでしょうか? またそれでうまくいってるのかどうか確かめる方法はありますか? つまり実際何回 someComplexExpressionが展開されてる回数を確かめる方法はありますか? よろしくお願い致します http://mevius.5ch.net/test/read.cgi/tech/1639713446/219
220: デフォルトの名無しさん [sage] 2023/06/25(日) 14:24:09.04 ID:H+Ij4nqZ 質問にさせていただきます 違う標数での有限体での計算を必要とするコードを考えてます ある変数に𝔽₃や𝔽₅の値を混在して代入することはないので𝔽₃の元を生成するconstructor F3や𝔽₅の元を生成すconstructor F5を定義して x = F3 $ 1+2 y = F5 $ 2-5 のような記述ができればいいなと思ってます そのためには data FiniteFieldCh3 = F3 Int instance Num F3 where... のようにF3,F5両方にNumを定義しないと
いけません 面倒なのでFiniteFieldと言うクラスを作って以下のようにできないかやってみたところ class FiniteField t where modulus :: t -> Int toInt :: t -> Int fromInt :: Int -> t instance ( FiniteField a ) => ( Num a ) where x + y = fromInt $ mod ( toInt x ) + ( toInt y ) ) ( char x ) http://mevius.5ch.net/test/read.cgi/tech/1639713446/220
221: デフォルトの名無しさん [sage] 2023/06/25(日) 14:24:14.71 ID:H+Ij4nqZ 以下のようなerror が出てきます prog.hs:22:10: error: • The constraint ‘FiniteField a’ is no smaller than the instance head (Use UndecidableInstances to permit this) • In the instance declaration for ‘(Num a)’ | 22 | instance ( FiniteField a ) => ( Num a ) where | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ コレはなんですか? ちなみにFlexibleInstancesというのが必要かとの事なので冒頭に {-# LANGUAGE FlexibleInstance
s #-} を入れています コンパイラはghc8.4.4です よろしくお願い致します http://mevius.5ch.net/test/read.cgi/tech/1639713446/221
222: デフォルトの名無しさん [sage] 2023/06/25(日) 14:43:47.12 ID:H+Ij4nqZ すいません、最後の行間違って修正前のやつコピペしました class FiniteField t where modulus :: t -> Int toInt :: t -> Int fromInt :: Int -> t instance ( FiniteField a ) => ( Num a ) where x + y = fromInt $ mod ( toInt x ) + ( toInt y ) ) ( modulus x ) です よろしくお願い致します http://mevius.5ch.net/test/read.cgi/tech/1639713446/222
223: デフォルトの名無しさん [sage] 2023/06/25(日) 15:08:12.64 ID:CDxt6lPg 型クラスの単相性制限とか、関数従属性とか、とか。。。 的外れなこと言ってたらごめん。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/223
224: デフォルトの名無しさん [sage] 2023/06/25(日) 15:23:50.61 ID:CDxt6lPg なんか Bard とかにつっこんでも情報得られるかも http://mevius.5ch.net/test/read.cgi/tech/1639713446/224
225: デフォルトの名無しさん [sage] 2023/06/25(日) 17:33:31.79 ID:OvK+yilq ありがとうございます 現在まだ調べてる最中なんですけど https://stackoverflow.com/questions/7198907/haskell-constraint-is-no-smaller-than-the-instance-head によるとどうもclass制約の解決をloopさせないための制約くさいです つまり「aがclasd Cのときclass Dにも入れる事ができる」、「aがclass Dのときclass Cにも入れる事ができる」の宣言 class ( C a ) => D a where ... class ( D a ) => C a where ... のような宣言があるとまずいようです な
ので=>の左側の型は右側の型より“短い”事が要求されるそうです 例えばtoDみたいな型生成子を作っておいて class ( C a ) => ( D ( toD a ) ) where ... などとしないといけないらしいです でその後newtypeを使うとどうやらこうやら書いてあるんですけどなんのことやら http://mevius.5ch.net/test/read.cgi/tech/1639713446/225
226: デフォルトの名無しさん [sage] 2023/07/03(月) 23:45:49.20 ID:QPaqlNti 値とmoduleどっちも含んだdata作ればいいのでは http://mevius.5ch.net/test/read.cgi/tech/1639713446/226
227: デフォルトの名無しさん [sage] 2023/07/04(火) 00:24:50.19 ID:+0TfLuMN >>226 こういうやつですね data FiniteField = FF { val :: Int, modulus :: Int } deriving ( Show, Eq) instance Num FiniteField where x + y = FF ( mod ( ( val x ) + ( val y ) ) ( modulus x ) )( modulus x ) x * y = FF ( mod ( ( val x ) * ( val y ) ) ( modulus x ) )( modulus x ) fromInteger x = FF x 1 でもコレだと例えば x = FF 2 7 y = FF 4 7 x + y のような場合実行時にプログラムは値に格納されてるmodulusを読みに行ってから割り算行
うという手間がかかります しかし私のやりたいプログラムではそもそも各変数のmodulusは確定していてそもそも読みに行くのはバカバカしい感じがします 実行時にxもyも𝔽₇の元と決まりきっててmod の第二引数はコンパイル時点で7と決まっているのにその7を読みに行く作業が無駄に思えるんです しかもコレは型ではなく値なので型チェックの恩恵も受けることができません プログラム中に出てくるmodilus事に全部F2型、F3型、F5型‥と全部作って全部のNum instance一個ずつ定義してとやればできるんでしょうけど、何が上手い逃げ道はないもの
かと http://mevius.5ch.net/test/read.cgi/tech/1639713446/227
228: デフォルトの名無しさん [sage] 2023/07/04(火) 11:11:04.93 ID:rN492ZrW この記事では剰余環を作っているみたいだけど、参考にならないかな https://qiita.com/gummycandy/items/9abca700eea7f46626e4 http://mevius.5ch.net/test/read.cgi/tech/1639713446/228
229: デフォルトの名無しさん [sage] 2023/07/06(木) 01:04:07.84 ID:sds/6LG1 みなさん情報ありがとうございます 色々紹介していただいたソースとか自分で探してみた情報とかでまずは一区切りつける事にしました こんな感じになりました https://ideone.com/3Lhc4z http://mevius.5ch.net/test/read.cgi/tech/1639713446/229
230: デフォルトの名無しさん [] 2023/08/05(土) 13:07:07.29 ID:1IOAcn45 hage http://mevius.5ch.net/test/read.cgi/tech/1639713446/230
231: デフォルトの名無しさん [sage] 2023/09/04(月) 14:41:20.09 ID:FcZAE9nJ haskellは廃れてきてるな、悲しい スペースリーク対応は難しすぎるしライブラリ類も最新のghcだと使えなかったりしてなんか 実用的な言語じゃないなって思う xmonadなんかはほとんどBangPatternだよね そういえば自動でstrictにする拡張が2個ぐらいあったけど追ってないどうなの http://mevius.5ch.net/test/read.cgi/tech/1639713446/231
232: デフォルトの名無しさん [] 2023/09/16(土) 21:21:50.35 ID:6682wM15 数学の集合は普通順番を付けて書くと思うのですが(添字でアクセスできたほうが便利) なぜ多くの言語では集合に順番がないのでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/232
233: デフォルトの名無しさん [] 2023/09/16(土) 21:25:49.38 ID:6682wM15 等価判定演算子では順番を問わないが、 記法としては順番によるインデックスアクセスもできる、が便利だと思うのですが 一番基礎的な集合の一つである自然数が順番を重視して扱うように大半の集合は順序を整頓して書かないと実用上不便ではないでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/233
234: デフォルトの名無しさん [sage] 2023/09/16(土) 23:06:28.20 ID:XG1/1lYn 順番がないやつと順番があるやつは なぜ対等な関係ではなく前者が一般的で後者が特殊だと言われるのか? 逆に、複素数はなんで虚部があるやつが一般的で虚部がないやつが特殊なのか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/234
235: デフォルトの名無しさん [] 2023/09/16(土) 23:13:33.62 ID:6682wM15 数学的概念として等価だったりどちらが特殊とか言えないのは納得しています ただ、集合は順序を維持して記述するようにしたほうが明らかに認知的負荷が少なく、数学的記法でも多くの場合でそうなっていると思うのですが、 多くの言語で組み込み型の集合がそうなっていないのはどのような思想によるものでしょうか?という質問です http://mevius.5ch.net/test/read.cgi/tech/1639713446/235
236: デフォルトの名無しさん [sage] 2023/09/17(日) 02:24:17.53 ID:yNwKlKA6 データ型としての起源としては 素集合データ構造から始まっているようなので 素である(disjoint)ことがまず要求されて 他に集合という名前が使われていないことから 素で非順序的なデータ型のことを集合型と呼ぶことになった模様 http://mevius.5ch.net/test/read.cgi/tech/1639713446/236
237: デフォルトの名無しさん [sage] 2023/09/17(日) 02:39:39.55 ID:XqeO/FaW 組み込み型とユーザー定義型の区別をなくす思想はある 最も正しいことを実現する思想ではなくミスをした場合の罪が軽くなる http://mevius.5ch.net/test/read.cgi/tech/1639713446/237
238: デフォルトの名無しさん [sage] 2023/09/17(日) 23:47:13.96 ID:70jB6wMR 初心者は++を使うけどなれたら<>を使ってる人が多い気がする SemiGroupであれさえすれば使える<>を使った方が汎用的にかけるからかな http://mevius.5ch.net/test/read.cgi/tech/1639713446/238
239: デフォルトの名無しさん [sage] 2023/09/18(月) 10:00:00.93 ID:E5yF50jH 俗説が廃れるのは「時代が変われば正しさが変わるから」ではありません 俗説が正解だった時代などない http://mevius.5ch.net/test/read.cgi/tech/1639713446/239
240: デフォルトの名無しさん [sage] 2023/09/19(火) 19:53:05.75 ID:QCYT99dv unixのtouchを実現したいのですが {-# LANGUAGE OverloadedStrings #-} import System.Posix.Files.ByteString main = do touchFile "hoge.txt" touch.hs: hoge.txt: touchFile: does not exist (No such file or directory) というエラーがでます ないのは当たり前でtouchで作ろうとしてるのですがバグがあるのでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/240
241: デフォルトの名無しさん [sage] 2023/09/19(火) 19:54:00.31 ID:QCYT99dv unixのtouchを実現したいのですが {-# LANGUAGE OverloadedStrings #-} import System.Posix.Files.ByteString main = do touchFile "hoge.txt" touch.hs: hoge.txt: touchFile: does not exist (No such file or directory) というエラーがでます ないのは当たり前でtouchで作ろうとしてるのですがバグがあるのでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/241
242: デフォルトの名無しさん [sage] 2023/09/19(火) 19:58:16.28 ID:QCYT99dv すみません、書き込むボタンの反応がなかったので連投になってしまいました http://mevius.5ch.net/test/read.cgi/tech/1639713446/242
243: デフォルトの名無しさん [sage] 2023/09/19(火) 20:14:24.31 ID:a563RtWW touchの本来の意味を考えれば、まあできなくてもそういうもんだなと思ふ http://mevius.5ch.net/test/read.cgi/tech/1639713446/243
244: デフォルトの名無しさん [sage] 2023/09/19(火) 20:14:45.64 ID:a563RtWW touchの本来の意味を考えれば、まあできなくてもそういうもんだなと思ふ http://mevius.5ch.net/test/read.cgi/tech/1639713446/244
245: デフォルトの名無しさん [sage] 2023/09/19(火) 20:18:27.88 ID:a563RtWW ありゃ俺も連投しちまったすまん なんか5ch重いっぽいね http://mevius.5ch.net/test/read.cgi/tech/1639713446/245
246: デフォルトの名無しさん [sage] 2023/09/20(水) 08:38:40.03 ID:I55f6i4N for i in * ; do touch anotherdir/$i ; done http://mevius.5ch.net/test/read.cgi/tech/1639713446/246
247: デフォルトの名無しさん [] 2023/09/20(水) 08:53:25.46 ID:I55f6i4N >>246(bash)でお茶を濁した perlが明日消えてなくなるらしいのでHaskellをPerlの代わりに使おうと思う 正規表現とグロブ、ファイル入出力はできた 他に何かあるかな http://mevius.5ch.net/test/read.cgi/tech/1639713446/247
248: デフォルトの名無しさん [sage] 2023/09/22(金) 12:15:07.45 ID:NjV4q9P3 数値のリストl=[1,10,3]みたいなのを 1 10 3と出力したい。末尾には空白はあってはならないとする 最初 putStrLn $ intersperse ' ' $ foldl' (\acc x -> acc ++ show x) [] l こんなのを考えたのだが10も1 0と分解されてしまった しかたなく泥臭いこんなコードを書いたのだがもっといい方法はないだろうか mp [] = return () mp [x] = putStrLn $ show x mp (x:xs) = do putStr $ show x ++ " " mp xs http://mevius.5ch.net/test/read.cgi/tech/16397134
46/248
249: デフォルトの名無しさん [sage] 2023/09/22(金) 13:06:36.18 ID:8SLDLfd5 https://jutememo.blogspot.com/2008/06/haskell-join-listdata-intersperse.html http://mevius.5ch.net/test/read.cgi/tech/1639713446/249
250: デフォルトの名無しさん [sage] 2023/09/22(金) 14:01:02.50 ID:NjV4q9P3 putStrLn $ intercalate " " $ map show l これでいけました http://mevius.5ch.net/test/read.cgi/tech/1639713446/250
251: デフォルトの名無しさん [sage] 2023/09/22(金) 14:01:12.58 ID:W8j4O+ex 泥臭いだけで罪があるかのように日常的に刷りこまれてるから 本当の有罪確定したやつは絶対許してもらえないよな そりゃそうだよな http://mevius.5ch.net/test/read.cgi/tech/1639713446/251
252: デフォルトの名無しさん [sage] 2023/09/27(水) 15:30:51.70 ID:9Ywamwi5 {-# LANGUAGE BinaryLiterals #-} この拡張をいれても let t = read "0x111" :: Int -- 16進数にパースできる 273 let s = read "0b111" :: Int -- 2進数にはパースできない 微妙に不便だ http://mevius.5ch.net/test/read.cgi/tech/1639713446/252
253: デフォルトの名無しさん [sage] 2023/09/27(水) 17:59:16.99 ID:k7PwLxD8 readが定義されたモジュールは別のLANGUAGEってこと? http://mevius.5ch.net/test/read.cgi/tech/1639713446/253
254: デフォルトの名無しさん [sage] 2023/10/11(水) 15:16:15.28 ID:1pnnvG+R groupBy (\a b -> snd a == snd b) これを括弧を使わずにかけますか groupBy ((==)<$>snd<*>snd)だと(a,b)->Boolとなって(a,b)->(c,d)->Boolとは型があいませんでした http://mevius.5ch.net/test/read.cgi/tech/1639713446/254
255: デフォルトの名無しさん [sage] 2023/10/11(水) 17:39:54.48 ID:Fikp0OWy >>254 import Data.Function groupBy ((==) `on` snd) 結局かっこは使うのだけど、これがあなたの求めるものでしょうか http://mevius.5ch.net/test/read.cgi/tech/1639713446/255
256: デフォルトの名無しさん [sage] 2023/10/11(水) 22:05:36.63 ID:1pnnvG+R 括弧を使わずにじゃなくてラムダを使わずにでした まさに欲しかったのそれです ありがとうございました!! http://mevius.5ch.net/test/read.cgi/tech/1639713446/256
257: デフォルトの名無しさん [sage] 2023/10/18(水) 05:38:40.90 ID:vCrdR6l9 QuickCheckを勉強しているんですが Runtime Errorを検出したくて次のように書きました anの要素は2以上n以下で複数回出現します testcaseがほとんどdiscardされるのですがリストをchoose (2,n)とかで生成するには どうしたら良いのでしょうか verboseCheckを指定してみるとskippedだらけなのですが スキップしたやつは表示しないで欲しい prop :: Positive Int -> [Int] -> Property prop (Positive n) an = all (>=2) an && length an == n ==> monadicIO
$ do a' <- run (solve n an) assert True http://mevius.5ch.net/test/read.cgi/tech/1639713446/257
258: デフォルトの名無しさん [sage] 2023/11/16(木) 18:41:54.01 ID:wXoixzgD 岡部健、復活したよ! エックス内を “Ken140291“ で探してみて下さい。 最近登録したばかりの様です。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/258
259: デフォルトの名無しさん [sage] 2023/11/18(土) 16:03:54.22 ID:sLhTkQlu 自分で書き込んでいるのでは・・・。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/259
260: デフォルトの名無しさん [sage] 2023/11/19(日) 15:31:44.23 ID:/inwpH7b >>248 init $ folfl (\a x -> a++[show x]++“ “) ““ [3,10,1] でOK http://mevius.5ch.net/test/read.cgi/tech/1639713446/260
261: デフォルトの名無しさん [sage] 2023/11/20(月) 09:46:08.35 ID:sZ0M6Dsh >260 打ち間違えた! lnlt$foldl(\a x->a ++show x++" ")[][1,10,3] が正解。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/261
262: デフォルトの名無しさん [sage] 2023/11/20(月) 14:32:44.66 ID:4MiKC4cJ >>258 ぎゃははははははは http://mevius.5ch.net/test/read.cgi/tech/1639713446/262
263: デフォルトの名無しさん [sage] 2023/11/20(月) 21:45:30.49 ID:Jf1v4QK8 https://github.com/ken-okabe/functional-programming-from-scratch-ja#before > Unkown(気づいてない) ウンコウンわろた。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/263
264: デフォルトの名無しさん [sage] 2023/11/20(月) 23:57:47.37 ID:N43MAaAU スレチ http://mevius.5ch.net/test/read.cgi/tech/1639713446/264
265: デフォルトの名無しさん [sage] 2023/11/21(火) 12:01:48.14 ID:MS7pneIs 毛の壁くん復活してたのか!! http://mevius.5ch.net/test/read.cgi/tech/1639713446/265
266: デフォルトの名無しさん [sage] 2023/11/21(火) 12:21:46.16 ID:W0g+S6dW https://archive.md/m7008 毛の壁(岡部健)についてはここが詳しい http://mevius.5ch.net/test/read.cgi/tech/1639713446/266
267: デフォルトの名無しさん [sage] 2023/11/22(水) 15:27:17.26 ID:1OepVPCl こんなコードがあるのですが cumsum k = unfoldr next . (,) 0 where next :: (Int, [Int]) -> Maybe (Int, (Int, [Int])) next (acc, x : xs) | acc <= k - x, acc' <- acc + x = Just (acc', (acc', xs)) next _ = Nothing acc <= k-xはわかるのですが、acc' <- acc + xというのはどういう文法なのですか? リスト内包表記でもないですし条件式の部分でモナドを扱ってるわけではないですよね? http://me
vius.5ch.net/test/read.cgi/tech/1639713446/267
268: デフォルトの名無しさん [sage] 2023/11/22(水) 16:31:30.12 ID:PuIW3qrN >>267 パターンガードかな https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%BC%E3%83%89_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0) http://mevius.5ch.net/test/read.cgi/tech/1639713446/268
269: デフォルトの名無しさん [sage] 2023/11/23(木) 07:24:43.49 ID:WRBO39fy <-はパターンガード修飾子と呼ぶのですね 初めて知りました ありがとうございました http://mevius.5ch.net/test/read.cgi/tech/1639713446/269
270: デフォルトの名無しさん [sage] 2023/11/24(金) 17:42:26.91 ID:V3Fz2AWZ 毛の壁のTwitterの新しいアカウントは Ken140291 FPFSstutorial leadmove3648637 です!! http://mevius.5ch.net/test/read.cgi/tech/1639713446/270
271: デフォルトの名無しさん [] 2023/12/04(月) 12:27:24.28 ID:GjmDAseS >>270 ぎゃっはっはっはっはw http://mevius.5ch.net/test/read.cgi/tech/1639713446/271
272: デフォルトの名無しさん [sage] 2024/01/01(月) 20:17:21.69 ID:DcfOChZv mapAccumL/Rの使いどころがよくわからないのですが どういう時に使うとかの指針ってありますか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/272
273: デフォルトの名無しさん [] 2024/01/09(火) 22:50:44.14 ID:3mg8b04T ここ5年で発売されたHaskellの書籍で最も優れたものを紹介してください http://mevius.5ch.net/test/read.cgi/tech/1639713446/273
274: デフォルトの名無しさん [] 2024/01/12(金) 10:55:28.35 ID:cAhPSGjh オワコン http://mevius.5ch.net/test/read.cgi/tech/1639713446/274
275: デフォルトの名無しさん [sage] 2024/02/29(木) 01:38:01.78 ID:d2gqoSk4 windowsにインストールできんみたいだなcabalがエラー? まあwindowsでやるなってことだな http://mevius.5ch.net/test/read.cgi/tech/1639713446/275
276: デフォルトの名無しさん [] 2024/03/03(日) 23:47:35.89 ID:9XAeTkis モナドについて、床下配線に例えられたり、世界を受け取って副作用後の世界を返すと(IOモナドについて)語られたりするのが当時は分からなくて、考えた結果 何かから値を取り出し、関数適用して(その関数が)何かに値を戻す「動き」をモナドという。 って結論になっていたのだが、IOモナドも含めてもっと良い例えはないかと考えた結果、 モナドとは、アウトソーシング(外部依頼)を数学的に表現したもの。 という結論に至った。 アウトソーシング先が(数学の)外の
世界だとIOモナドで、同じ数学の世界だとその他のモナド。 それならHaskell自身は「この関数実行しておいて~」って依頼出して結果を受け取るだけだから、 副作用はないと言う主張に矛盾はない(のか?) (もしくは、IOモナドはHaskellが受け取れる形の値を返すような入出力の「マシン語」を返してる?) そう考えると、数学が「数学の外とのやり取り」という概念を獲得したと思うと凄い。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/276
277: デフォルトの名無しさん [sage] 2024/03/04(月) 00:46:59.53 ID:XMYw3zR0 箱の中に処理したいデータが入ってるけど一緒にIOウイルスも入ってて 普通に箱を開けるとIOウイルスが外界に漏れて困るから もう一回り大きい箱を用意してその中に箱とデータ処理装置を入れて 密封した上で内側の箱を開けてデータを処理する そうすると箱の中に処理されたデータとIOウイルスが入った状態になる これを延々と繰り返すのがIOモナド ずっと前に毒ガスで考えた比喩だけど最近だとこっちだな http://mevius.5ch.net/test/read.cgi/tech/1639713446/277
278: デフォルトの名無しさん [] 2024/03/04(月) 01:02:22.82 ID:vyClhVzf ふーむ。 仮にアセンブラと1対1に対応したCの関数を全部Haskellから呼べるようにすると、出来ちゃうわけで。 (do形式だとまるっきりアセンブラコードに見えるHaskellコードの出来上がり) そう考えて私のアウトソーシング説が出来た感じですね。 Haskellがモナドを採用したのは数学(関数型言語だったっけ?)の敗北ってどっかで読みましたし。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/278
279: デフォルトの名無しさん [sage] 2024/03/04(月) 01:22:40.61 ID:XMYw3zR0 doの場合は1行ごとに新しい箱が作られてる 順序はたまに前後するけど内側の箱のデータは外側の箱でしか使えないから 必要な順序は保証される 外界の予測不能な状態を全部1つの箱の中に押し込んで 箱の外側の処理装置製造工場は全部予測可能(純粋)にしてる感じ 数学の敗北の意味はよく分からないけど 実用性のために予測不能な状態を持ち込んだことかな http://mevius.5ch.net/test/read.cgi/tech/1639713446/279
280: デフォルトの名無しさん [sage] 2024/03/06(水) 10:29:39.18 ID:Yy7OLBEk なんか大げさな例えを使いたがるやつが増えたなぁ コーディングの上でなんの役に立つんだが http://mevius.5ch.net/test/read.cgi/tech/1639713446/280
281: デフォルトの名無しさん [sage] 2024/03/06(水) 15:29:14.97 ID:soRPwZI7 「末尾呼び出ししたい関数をデータコンストラクタで置き換える」という仮説は役に立つけれども (>>=)はコンストラクタではないという事実を見ただけで仮説を捨ててしまうことは科学的によくあること http://mevius.5ch.net/test/read.cgi/tech/1639713446/281
282: デフォルトの名無しさん [] 2024/04/10(水) 04:46:37.45 ID:+L19CyUd WindowsでghcupをインストールするのにWSLが不要になって PowerShellだけで導入できるようになってる http://mevius.5ch.net/test/read.cgi/tech/1639713446/282
283: デフォルトの名無しさん [sage] 2024/04/13(土) 09:43:59.70 ID:p3ysjEUv rustスレで知ったけどhaskellを正格にして依存型を入れたidris(idris2)つー言語があるんだな http://mevius.5ch.net/test/read.cgi/tech/1639713446/283
284: デフォルトの名無しさん [sage] 2024/04/13(土) 10:37:58.47 ID:VEwLcqlL idrisまで興味があるのならHaskell/Elm/Rust/Zigの流れで開発されているRoc-langも見ておくと良い 特にstatic reference counting周り http://mevius.5ch.net/test/read.cgi/tech/1639713446/284
285: デフォルトの名無しさん [sage] 2024/04/13(土) 22:46:49.50 ID:p3ysjEUv 色々知らないのがあった、ありがとう static reference countingつーのが流行りなの 最近のhaskellもrustみたいな1回しかつかえない線形型(linera haskell?)が導入されてるね http://mevius.5ch.net/test/read.cgi/tech/1639713446/285
286: デフォルトの名無しさん [] 2024/04/14(日) 08:32:57.22 ID:ZXz6cRZI IOモナドの入力関数も、引数のない関数=変数と捉えると、実質線形型と同じ。 let x = 0 in return (x + 1) >>= x -> print x こうすると変数xはシャドーイングによって同名の別の変数が生成される。 getLineとかの入力関数はHaskell(数学)の外で初期化される変数とも考えられる。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/286
287: デフォルトの名無しさん [sage] 2024/05/17(金) 10:56:06.61 ID:kEVlBeR0 参照カウントは0になれば即座にデストラクタを呼び出す つまり呼び出しを遅延しない 正格にすることと参照カウントを入れることは実質的に同じこと http://mevius.5ch.net/test/read.cgi/tech/1639713446/287
288: デフォルトの名無しさん [sage] 2024/05/18(土) 22:55:12.58 ID:HEnIptqp cabalのバージョン上がってたので windowsで試したらちゃんと動いたわ 気にかけてくれてたんやな http://mevius.5ch.net/test/read.cgi/tech/1639713446/288
289: デフォルトの名無しさん [sage] 2024/06/11(火) 20:46:47.08 ID:zqrBHeqN IOモナドを拡張して、副作用をDBだけに限定したモナドとか作れないの? http://mevius.5ch.net/test/read.cgi/tech/1639713446/289
290: デフォルトの名無しさん [] 2024/06/20(木) 02:22:58.45 ID:s4SRXQdp いつの間にかHaskellがC#より速くなってた…。 https://nshinchan01.hateblo.jp/entry/2024/06/20/021327 http://mevius.5ch.net/test/read.cgi/tech/1639713446/290
291: デフォルトの名無しさん [] 2024/06/23(日) 11:34:59.09 ID:1+Xj+JzS すみません GHCのWindows11対応についての質問ですが 「9.2」以前のGHCはWindows11をサポートしていないとの事ですが ttps://gitlab.haskell.org/ghc/ghc/-/wikis/platforms/windows これはプログラムコンパイルをして アプリケーションを生成できないだけで コンソール内での実行や学習をする分には 「9.2」以前のGHCでも問題ないとの認識で大丈夫でしょうか。 ライブラリが9.0に対応していない物があり確認したいです。 http://mevius.5ch.net/test/read.cgi/tech/1639
713446/291
292: デフォルトの名無しさん [sage] 2024/06/23(日) 21:13:21.29 ID:1+Xj+JzS 度々すみません。 GHCのWindows11対応についての質問の件 Windows11機にGHC8.xをインストールして試した所 問題なくコンソールから実行して 結果のデータファイル生成できました。 取り敢えずはこれでやってみます。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/292
293: デフォルトの名無しさん [sage] 2024/07/03(水) 21:32:31.40 ID:FVo2vRsM Functorってf : value -> valueの関数をfmap f : computation -> computationの関数に拡張してあれこれするけど、 そもそもvalue -> value関数がいらなくない? わざわざvalue とcomputationを区別するから難しくなるのであって、 全部Functor適用した体で computation -> computationの拡張関数だけ使うように 設計しなおせばもっと普及するんじゃない? http://mevius.5ch.net/test/read.cgi/tech/1639713446/293
294: デフォルトの名無しさん [sage] 2024/07/03(水) 23:29:27.98 ID:XPii5wC3 何を言っとるんじゃw http://mevius.5ch.net/test/read.cgi/tech/1639713446/294
295: デフォルトの名無しさん [sage] 2024/07/04(木) 00:05:21.90 ID:CIK9cQRa computationにしたら理論的にカプセル化されるから、例えばT computationで専用に作った関数はU computationでは使いまわしできない。 だから一般的にvalue -> valueで作ることでT computationでもU computationでも使いまわしできるようにしてるというのはわかる。 でも、そういうところが使いにくくて普及してないんじゃないかと思うから、T computationで専用で作った関数も特に何もせず U computationの関数として使えるようになったらもっと使いやすくなると思
う。 というかHaskellにはcomputationの概念は百害あって一利なしなんじゃまいか。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/295
296: デフォルトの名無しさん [sage] 2024/07/04(木) 14:17:13.04 ID:PVQ//B0J >>295 君の言うcomputationってどういう定義? http://mevius.5ch.net/test/read.cgi/tech/1639713446/296
297: デフォルトの名無しさん [sage] 2024/07/04(木) 19:36:46.28 ID:CIK9cQRa しらんがな。 一応マジレスすると、valueと似ているけどなんか違いがあるもの、ぐらいだろう。 自分の意図としては、”計算機”上で生成されたデータ。 計算機というのは電子計算機に限定されない。 電卓でもいいし、そろばんでもいいし、計算するときのもととなる 数の表現とかをcomputationと呼んでも差し支えないと思ってる。 たとえば、 value:27 に対して電子計算機上だと 11011(2) で表現されるものがcomputation。 そろばんだったらそろばんの玉の配置。 計算
してパチパチ音が出るのが副作用。 逆に言うとvalueの方がわかり難いと思う。計算している計算機の外の世界の 何か数的データみたいな感じがしてわざわざそんな区別いるか?と思う。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/297
298: デフォルトの名無しさん [sage] 2024/07/04(木) 23:38:08.08 ID:iUDrYol2 >>297 computationはvalueの一つ `5 + 3`がcomputation `Just 8`もcomputation http://mevius.5ch.net/test/read.cgi/tech/1639713446/298
299: デフォルトの名無しさん [sage] 2024/07/05(金) 00:05:27.16 ID:b38yqPqv >>298 computationがvalueの一つだったら 概念的に computation ⊆ value になるけど。 少なくとも拡張しているのだから computation ⊇ value にならないとおかしくない? `5 + 3`がcomputationというのは前提にもよるからなんとも言えないと思う。 計算して8(=5+3)を導いたなら8はcomputationだと思うが。 たとえば、掛け算だったとして、九九を唱えてゴサンジュウゴで15を導き出したんなら計算してないからvalueだと思う。 http://mevius.5ch.net/t
est/read.cgi/tech/1639713446/299
300: デフォルトの名無しさん [sage] 2024/07/05(金) 00:53:37.68 ID:DkqpNxkH >>299 おかしくないよ OOPでクラスAを継承してクラスBを作った場合(B extends A)を考えてみたら? `九九を唱えてゴサンジュウゴの結果を導き出す`のがcomputation 導き出された結果と導き出す計算を区別して http://mevius.5ch.net/test/read.cgi/tech/1639713446/300
301: デフォルトの名無しさん [sage] 2024/07/05(金) 02:03:56.64 ID:b38yqPqv やっぱりHaskellスレにcomputationネタわかる人いたんだね。 >>300 >OOPでクラスAを継承してクラスBを作った場合(B extends A)を考えてみたら? ここは納得。 >導き出された結果と導き出す計算を区別して なにか f: value -> computation型の関数を念頭に置いて `f ()`はcomputationと言っているのでは? 意図を勘違いしているかもしれないですが、computationはあくまで導き出された結果でしょう。 それと、関数の返り値を導き出す計算をするにあた
って出てくる効果を定義に含めようとしているように感じたのですが、 それはあくまで value -> computation型の関数を計算することに付随する性質であって computation概念そのものじゃないと思うのですが。 あくまでcomputation概念自体はそういう関数を計算して得られた計算結果なんじゃないですかね。 そう考えると何か不都合な例とかあります? http://mevius.5ch.net/test/read.cgi/tech/1639713446/301
302: デフォルトの名無しさん [] 2024/07/25(木) 23:56:39.51 ID:zdgCFOr2 stateやioモナドってHaskell以外でも使われてるの? maybeやeitherは関数型でない言語でも同等のものがあるから分かるけど、stateやioはいまいち便利そうな感じがしない http://mevius.5ch.net/test/read.cgi/tech/1639713446/302
303: デフォルトの名無しさん [] 2024/07/26(金) 05:41:42.96 ID:JmafwQnp >>302 それはそうで、IOモナドは他の言語例えばC言語系列だとhoge();の";"部分を数学的に表現しただけだから。 見た目だけなら x = x + 1; printf("%d\n", x); を return (x + 1) >>= \x -> print x do形式に直して x <- return (x + 1) print x ただ、x <- の部分は同名の別の変数をシャドーイングしてるので、厳密にメモリの動作まで合わせるならIORefを使う。 Haskellから見たらメモリもIO処理(ファイル処理含む)も等
しく外部への入出力という扱い。 だから、実用としては意味が無い。 一見複数行に見えるコードがその気になれば全部一行に出来るという感動はあるが、それだけだ。 Haskellを仲立ちにして数学とプログラミング言語の関係を研究したりには便利。 逆に自力でIOモナドをPythonなどの適当な言語で実装して全てのコードを関数っぽく書ける。 (Pythonだと演算子の自作が出来ないのでf = (>>=)みたいな事になる) Haskellは便利だから使うものじゃない。 美しいから使うものだ。 あ、でも腐っても最新版は実行速度が結構上がってる(C#/Java並み
)ので、選択肢から外される理由も減ってきた気がする。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/303
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 364 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.029s