関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ
https://haskell.jp/
前スレ
関数型プログラミング言語Haskell Part31
https://mevius.5ch.net/test/read.cgi/tech/1506447188/
探検
関数型プログラミング言語Haskell Part32
■ このスレッドは過去ログ倉庫に格納されています
2019/01/29(火) 09:05:47.90ID:gJP/u7IJ
358デフォルトの名無しさん
2019/05/23(木) 18:42:06.90ID:ATxGBnNk 次にお前らは『優れているを定義してくれ』と言うッ!
359デフォルトの名無しさん
2019/05/24(金) 01:05:05.82ID:jCONIFNW 任意の言語に丸投げするシェルスクリプトはズル
文字列をevalするやつもズル
ズルをする必要がない言語は優れている
どうせこんな感じだろうと思ってる
文字列をevalするやつもズル
ズルをする必要がない言語は優れている
どうせこんな感じだろうと思ってる
360デフォルトの名無しさん
2019/05/24(金) 04:51:31.33ID:3xUJmLCM いくつかの基準が思いつく。
速い・短い・アシストが手厚い・理解しやすい・バグが混入しにくい…
>>359
「ズル」には悪い、の意味が予め含まれていると思うので納得できない。
evalを用いた場合に比べて静的型の解決の方が優れているのを示す必要があるでしょう。
速い・短い・アシストが手厚い・理解しやすい・バグが混入しにくい…
>>359
「ズル」には悪い、の意味が予め含まれていると思うので納得できない。
evalを用いた場合に比べて静的型の解決の方が優れているのを示す必要があるでしょう。
361デフォルトの名無しさん
2019/05/24(金) 08:28:17.80ID:jCONIFNW 格闘技ですら、反則には反則負けという意味が含まれている
362デフォルトの名無しさん
2019/05/24(金) 09:32:47.08ID:3xUJmLCM 含まれてないと思うし、Haskellに関係ない。
363デフォルトの名無しさん
2019/05/24(金) 11:18:44.54ID:YDCPM0sO sequence_の使い所が分からん。。。
mapM_使った方が短くなるし。
うーむ。。。
渡すリストにIOな関数含められる=IOな関数を使う
リスト内包表記も使えるのは良いけど、mapM_のが簡潔。
import Data.List
import System
main = mapM_ put $ zip hellos marks
-- sequence_ [put (x,y) | (x,y) <- zip hellos marks]
hellos = (cycle.tails) "Hello World!!"
marks = cycle ["/","|","\\","--"]
put (x,y) = do putStrLn (x ++ "\n" ++ y)
mapM_ (\_ -> putStr "") [1..50000]
system "clear"
mapM_使った方が短くなるし。
うーむ。。。
渡すリストにIOな関数含められる=IOな関数を使う
リスト内包表記も使えるのは良いけど、mapM_のが簡潔。
import Data.List
import System
main = mapM_ put $ zip hellos marks
-- sequence_ [put (x,y) | (x,y) <- zip hellos marks]
hellos = (cycle.tails) "Hello World!!"
marks = cycle ["/","|","\\","--"]
put (x,y) = do putStrLn (x ++ "\n" ++ y)
mapM_ (\_ -> putStr "") [1..50000]
system "clear"
364デフォルトの名無しさん
2019/05/24(金) 11:19:15.22ID:YDCPM0sO hellos = (cycle.tails) "Hello World!!"
marks = cycle ["/","|","\\","--"]
put (x,y) = do putStrLn (x ++ "\n" ++ y)
mapM_ (\_ -> putStr "") [1..50000]
system "clear"
marks = cycle ["/","|","\\","--"]
put (x,y) = do putStrLn (x ++ "\n" ++ y)
mapM_ (\_ -> putStr "") [1..50000]
system "clear"
365デフォルトの名無しさん
2019/05/24(金) 14:25:55.92ID:3xUJmLCM >>363
モナディックアクションを構造に入れて使うとき重宝するよ。
main = sequence_ . (map (putStr "log:" >>)) $ [print "hoo",putStr "bar"]
個々のアクションを好きに調整できる(例ではそれぞれに前処理を足した)。
モナディックアクションを構造に入れて使うとき重宝するよ。
main = sequence_ . (map (putStr "log:" >>)) $ [print "hoo",putStr "bar"]
個々のアクションを好きに調整できる(例ではそれぞれに前処理を足した)。
366デフォルトの名無しさん
2019/05/24(金) 18:49:41.11ID:aewo4dFz367デフォルトの名無しさん
2019/05/24(金) 18:55:43.73ID:aewo4dFz 別件なのですが、俺俺Eq型クラス(MyEq)を作って見ているのですが、
HugsだとNum a型のインスタンスを作れるのに、GHCだとエラーが出ます。
経験ある方、いらっしゃいますでしょうか?
main = do print $ 1 === 1
print $ 1 /== 1
print $ 1 === 2
print $ 1 /== 2
class MyEq a where
(===),(/==) :: a -> a -> Bool
x === y = not (x /== y)
x /== y = not (x === y)
instance (Num a) => MyEq a where
x === x' = isZero (x - x')
x /== x' = not (x === x')
isZero 0 = True
isZero _ = False
GHCだと全ての型をインスタンスにしろ的なエラーメッセージが出ます。。。
スマートな方法があれば。。。
HugsだとNum a型のインスタンスを作れるのに、GHCだとエラーが出ます。
経験ある方、いらっしゃいますでしょうか?
main = do print $ 1 === 1
print $ 1 /== 1
print $ 1 === 2
print $ 1 /== 2
class MyEq a where
(===),(/==) :: a -> a -> Bool
x === y = not (x /== y)
x /== y = not (x === y)
instance (Num a) => MyEq a where
x === x' = isZero (x - x')
x /== x' = not (x === x')
isZero 0 = True
isZero _ = False
GHCだと全ての型をインスタンスにしろ的なエラーメッセージが出ます。。。
スマートな方法があれば。。。
368デフォルトの名無しさん
2019/05/24(金) 20:57:13.04ID:SgRJwbG9369デフォルトの名無しさん
2019/05/25(土) 02:52:58.92ID:qv11a0DJ370デフォルトの名無しさん
2019/05/25(土) 04:10:17.12ID:/RQqfD4m >>369 具体的にはどのあたりが?
371デフォルトの名無しさん
2019/05/25(土) 06:07:15.41ID:/RQqfD4m "--port=" <> ( 8000 <> 80 )
これが "--port=8080" になって欲しい、みたいな?
これが "--port=8080" になって欲しい、みたいな?
372デフォルトの名無しさん
2019/05/25(土) 12:55:48.15ID:1pSM7n1N373デフォルトの名無しさん
2019/05/25(土) 14:00:56.82ID:/RQqfD4m374デフォルトの名無しさん
2019/05/25(土) 14:25:22.48ID:/RQqfD4m ...でも演算子を上述のように定義すると半群の結合則を満たさない。
dynamicパッケージでもそうされてなくて、結果は"--port=800080"になります。
動的プログラミングを求める人は柔軟に使える演算が欲しくて、
Haskellのデフォルトの定義は型変換がただ面倒くさい。
369が言いたかったのは例えばそういう事かなと解釈しました。
dynamicパッケージでもそうされてなくて、結果は"--port=800080"になります。
動的プログラミングを求める人は柔軟に使える演算が欲しくて、
Haskellのデフォルトの定義は型変換がただ面倒くさい。
369が言いたかったのは例えばそういう事かなと解釈しました。
375デフォルトの名無しさん
2019/05/25(土) 17:32:54.76ID:nXhWU27U376デフォルトの名無しさん
2019/05/25(土) 20:46:23.64ID:orcduCKk 何やってるのかよく分からんけど、おまじないで解決
haskellの初心者時代って、こういうの他言語に比べて多いよね
どうにか分かりやすく説明できないものか、いつも悩む
haskellの初心者時代って、こういうの他言語に比べて多いよね
どうにか分かりやすく説明できないものか、いつも悩む
377デフォルトの名無しさん
2019/05/25(土) 21:58:16.52ID:1pSM7n1N >>374
まあ確かに数値計算するときにfromIntegralだのrealToFracだのをゴテゴテ書くのは
(それを要求される理屈はわかっていても)面倒くさい
そこを「柔軟」にしていくと人が書き間違えたときに教えてくれなくなるから
結局は書きやすさと安全性とのトレードオフだよなあ
まあ確かに数値計算するときにfromIntegralだのrealToFracだのをゴテゴテ書くのは
(それを要求される理屈はわかっていても)面倒くさい
そこを「柔軟」にしていくと人が書き間違えたときに教えてくれなくなるから
結局は書きやすさと安全性とのトレードオフだよなあ
378デフォルトの名無しさん
2019/05/31(金) 20:49:17.15ID:SYuh0ZxQ 結局、マクロ、関数、型チェック以外にプログラムにできることなんてない。
バカがバカな夢を見る。
バカがバカな夢を見る。
379デフォルトの名無しさん
2019/05/31(金) 20:53:47.48ID:4BnNLuhc それを証明してから言えよバカ
380デフォルトの名無しさん
2019/06/02(日) 11:37:55.39ID:mVf2k3qD Cは関数の定義はゴテゴテ書くが演算子の定義は何も書かなかった
C++が演算子を定義するようになったからHaskellも影響を受けたんじゃないか
数学的証明だけでなく、歴史を巻き添えにして議論しないと現実は見えない
C++が演算子を定義するようになったからHaskellも影響を受けたんじゃないか
数学的証明だけでなく、歴史を巻き添えにして議論しないと現実は見えない
381デフォルトの名無しさん
2019/06/07(金) 00:15:16.82ID:pdU7zkZH すみません、
凄いH書籍で学習していて疑問に思ったのですが
型クラス中級で、真理値の様な物を持ちうる型、
JavaScriptのfalsyな値を持つ型を作る実習で
Intや[ ]を独自のYesNo型のインスタンスにする
例があったのですが
標準で存在する型に後から
独自の型のインスタンスにする事に違和感を感じ
バグの温床になるのではという懸念の印象がありました。
オブジェクト嗜好のサブクラスみたいに
「Int」型から「IntYesNo」型を
生成できるのなら違和感ないのですが。
これについての合理性と安全性を明示している
書籍やサイトを知っていたら教えて下さい。
凄いH書籍で学習していて疑問に思ったのですが
型クラス中級で、真理値の様な物を持ちうる型、
JavaScriptのfalsyな値を持つ型を作る実習で
Intや[ ]を独自のYesNo型のインスタンスにする
例があったのですが
標準で存在する型に後から
独自の型のインスタンスにする事に違和感を感じ
バグの温床になるのではという懸念の印象がありました。
オブジェクト嗜好のサブクラスみたいに
「Int」型から「IntYesNo」型を
生成できるのなら違和感ないのですが。
これについての合理性と安全性を明示している
書籍やサイトを知っていたら教えて下さい。
382デフォルトの名無しさん
2019/06/07(金) 00:45:34.97ID:UZbkEtL+383デフォルトの名無しさん
2019/06/07(金) 01:35:51.00ID:UZbkEtL+ >>381
あと、なんど読み返してもタイポっぽく見えないんでツッコミ入れる。
「AをBのインスタンスにする」と言うとき、
Aは型、Bは『型クラス』だからな。
失礼なことを言うが、もしかして違和感の根源は、
型と型クラスがそれぞれ何なのか理解できていないところにあるのでは?
あと、なんど読み返してもタイポっぽく見えないんでツッコミ入れる。
「AをBのインスタンスにする」と言うとき、
Aは型、Bは『型クラス』だからな。
失礼なことを言うが、もしかして違和感の根源は、
型と型クラスがそれぞれ何なのか理解できていないところにあるのでは?
384デフォルトの名無しさん
2019/06/07(金) 06:58:43.76ID:m7qCH6wP 『凄いH書籍』
(;・`д・́)...ゴクリ...(`・д́・;)
(;・`д・́)...ゴクリ...(`・д́・;)
385デフォルトの名無しさん
2019/06/07(金) 19:56:02.21ID:SUVJWRIg 同モジュール(Haskellでいう)内なら拡張に対しては責任を持つべきなので
拡張がモジュールをまたがないなら大した問題はない
他の言語でもモジュール内操作に対してはあんまりフールプルーフじゃないしね
がHaskellの場合は拡張が子モジュールに伝播してしまう
拡張がモジュールをまたがないなら大した問題はない
他の言語でもモジュール内操作に対してはあんまりフールプルーフじゃないしね
がHaskellの場合は拡張が子モジュールに伝播してしまう
386デフォルトの名無しさん
2019/06/07(金) 22:06:13.49ID:wtNNzOUb Ruby の偽は、false, nil の2つだけ!
JavaScript, Python, PHP などは、偽が10個ぐらいある!
空文字列・空配列・空辞書とか、0, 0.0 とか、
これらの言語は、しょーもないバグが多い!
だから、Rubyよりも生産性が低い!
JavaScript, Python, PHP などは、偽が10個ぐらいある!
空文字列・空配列・空辞書とか、0, 0.0 とか、
これらの言語は、しょーもないバグが多い!
だから、Rubyよりも生産性が低い!
387デフォルトの名無しさん
2019/06/07(金) 23:58:36.77ID:KFSm+TLI 『入門HASKELLプログラミング』2019年07月31日発売予定
https://www.shoeisha.co.jp/book/detail/9784798158662
「コンピュータのプログラミング」から脱却し、“学術”ではない、実用度重視のHaskell
入門書
Haskellは、関数型プログラミングを研究する対象としての側面が強すぎ、一般的なアプリ
ケーション構築を目的とした開発言語の側面が、ともすればおざなりになりがちでした。
そのため、他の言語(JavaとかC/C++とかC#など)がこなす、ありふれたアプリケーション
をHaskellで構築しようとすると、キーボードを叩く指が止まってしまうことがありました。
本書は関数型プログラミングの基本を押さえつつ、いわゆる「開発言語」として実用的な
プログラムを書けるようなレベルに誘う一冊です。(後略)
https://www.shoeisha.co.jp/book/detail/9784798158662
「コンピュータのプログラミング」から脱却し、“学術”ではない、実用度重視のHaskell
入門書
Haskellは、関数型プログラミングを研究する対象としての側面が強すぎ、一般的なアプリ
ケーション構築を目的とした開発言語の側面が、ともすればおざなりになりがちでした。
そのため、他の言語(JavaとかC/C++とかC#など)がこなす、ありふれたアプリケーション
をHaskellで構築しようとすると、キーボードを叩く指が止まってしまうことがありました。
本書は関数型プログラミングの基本を押さえつつ、いわゆる「開発言語」として実用的な
プログラムを書けるようなレベルに誘う一冊です。(後略)
388デフォルトの名無しさん
2019/06/08(土) 01:49:15.40ID:WG0iLGtf389デフォルトの名無しさん
2019/06/08(土) 03:07:04.34ID:PPvh7BCd Pythonのfalsyな値には、そんなに違和感はないけどなぁ……。
390デフォルトの名無しさん
2019/06/08(土) 03:44:53.76ID:epil0e3i l
391デフォルトの名無しさん
2019/06/08(土) 03:45:50.56ID:C8CdREmC 【実体験】ブログを1,000記事ほど書いたら、月300万くらい稼げた話
https://www.youtube.com/watch?v=GmVulh282ps&t=604s
【報告】ブログで「月収1,000万」を達成できました【方法を解説する】
https://www.youtube.com/watch?v=pgjcuLp8wt0
年間ほど努力したら「年収3,000万」になったので、経験談を語る
https://www.youtube.com/watch?v=oV_SY-a1lMs
期間工ブログの収入は1500万円でした。【フリーランスの現実&底辺からの復活編】
https://www.youtube.com/watch?v=aijLjFLOuC4
年商1300万のプロブロガーの初心者時代から今までの軌跡
https://www.youtube.com/watch?v=UMiF4T2EO9o
【収益報告】実働月10hでも大金稼ぐ方法を解説【年収6,000万】
https://www.youtube.com/watch?v=o2ISWP-VZsw&t=288s
無料ブログは稼げない。稼ぐならオススメはWordPress一択の理由
https://www.youtube.com/watch?v=o8oUe3JS-lg
https://www.youtube.com/watch?v=GmVulh282ps&t=604s
【報告】ブログで「月収1,000万」を達成できました【方法を解説する】
https://www.youtube.com/watch?v=pgjcuLp8wt0
年間ほど努力したら「年収3,000万」になったので、経験談を語る
https://www.youtube.com/watch?v=oV_SY-a1lMs
期間工ブログの収入は1500万円でした。【フリーランスの現実&底辺からの復活編】
https://www.youtube.com/watch?v=aijLjFLOuC4
年商1300万のプロブロガーの初心者時代から今までの軌跡
https://www.youtube.com/watch?v=UMiF4T2EO9o
【収益報告】実働月10hでも大金稼ぐ方法を解説【年収6,000万】
https://www.youtube.com/watch?v=o2ISWP-VZsw&t=288s
無料ブログは稼げない。稼ぐならオススメはWordPress一択の理由
https://www.youtube.com/watch?v=o8oUe3JS-lg
392デフォルトの名無しさん
2019/06/08(土) 06:33:44.76ID:YhBKasle get programming with haskellは、stackがでてくるの終盤だったり、
あまり実用度重視じゃないんだけどなー
あまり実用度重視じゃないんだけどなー
393デフォルトの名無しさん
2019/06/08(土) 10:04:10.25ID:ryWt2Gls394デフォルトの名無しさん
2019/06/08(土) 13:03:38.36ID:JxaHk6L1 そんなコードが生じるシチュエーションがわからん。
395381
2019/06/08(土) 17:21:52.39ID:mlZK/xCe ありがとうございます。
既存の型を独自の型クラスの
インスタンスにする事は
同モジュール内の拡張として
プログラムする人が責任を持つべきなので
問題はないとの事で了解しました。
急いで質問を書いたので
型クラスを型と間違って書いてしまいすみませんでした。
既存の型を独自の型クラスの
インスタンスにする事は
同モジュール内の拡張として
プログラムする人が責任を持つべきなので
問題はないとの事で了解しました。
急いで質問を書いたので
型クラスを型と間違って書いてしまいすみませんでした。
396デフォルトの名無しさん
2019/06/18(火) 06:17:55.21ID:3nOE2mBA プログラム板にキチガイ降臨中!botに一晩も反応する異常さ
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/
142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/
142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。
397デフォルトの名無しさん
2019/06/20(木) 01:44:21.27ID:R55GIdRS functoriality とはどのような性質のことでしょうか?
398デフォルトの名無しさん
2019/06/20(木) 04:43:35.94ID:R55GIdRS >>397
補足しますと、functorial は分かります。
ですが、functoriality がいったい何に対してどのような意味で使う言葉なのか分かりません。
Hask圏を例にしてくれると助かります。
補足しますと、functorial は分かります。
ですが、functoriality がいったい何に対してどのような意味で使う言葉なのか分かりません。
Hask圏を例にしてくれると助かります。
399デフォルトの名無しさん
2019/06/27(木) 19:51:11.76ID:xcUkqEUS400デフォルトの名無しさん
2019/07/01(月) 09:45:16.04ID:PP1UmLnE ラズパイでStackの環境構築をしていざコンパイルをしてみたら
・llvmは6.0のみサポートだよ
・一応コンパイルしてみるよ
というメッセージが出た後,
・サポートされていない機械語を使ってるよ
ということでコンパイルが通らなかった。
llvmを6.0のソースからmakeすればいいのかな?
Stackやllvmはすべてapt-getで最新版にしてあります。
・llvmは6.0のみサポートだよ
・一応コンパイルしてみるよ
というメッセージが出た後,
・サポートされていない機械語を使ってるよ
ということでコンパイルが通らなかった。
llvmを6.0のソースからmakeすればいいのかな?
Stackやllvmはすべてapt-getで最新版にしてあります。
401デフォルトの名無しさん
2019/07/01(月) 21:38:59.85ID:/x+NnqQg officialのrepositoryと最新版(binary)は違うよ
402デフォルトの名無しさん
2019/07/02(火) 12:46:31.20ID:+JGifkmy hackageのcabal-installのbootstrap.shをクリックしても
Page not found: Sorry, it's just not here.
とでてダウンロードできないのだが?
Page not found: Sorry, it's just not here.
とでてダウンロードできないのだが?
403デフォルトの名無しさん
2019/07/02(火) 16:08:25.14ID:+JGifkmy まあいいやtar.gzに入ってるからな
404デフォルトの名無しさん
2019/07/02(火) 20:25:51.99ID:2+AqqNZH >>401
レスありがとうございます。
公式の最新版とaptリポジトリでの最新版は違うということは認識してます。
やっぱり llvm 6 のソースを公式サイトからおとして make install ですかね?
レスありがとうございます。
公式の最新版とaptリポジトリでの最新版は違うということは認識してます。
やっぱり llvm 6 のソースを公式サイトからおとして make install ですかね?
405デフォルトの名無しさん
2019/07/11(木) 15:19:40.91ID:EO8VLz8P hackageのホームページのダウンロード数が出るところにはcabalとかからダウンロードしたものは
数にふくまれてる?
数にふくまれてる?
406400,402
2019/07/20(土) 23:02:04.74ID:flSCEm3M 一応ラズパイ上(raspberian 9.4) でもコンパイルできました。
ただしstack を使わずghcで直接コンパイルですが。
オプションが渡されていないバグがあったような情報を
見かけましたがこのあたりが原因?
https://gitlab.haskell.org/ghc/ghc/issues/11058
ただしstack を使わずghcで直接コンパイルですが。
オプションが渡されていないバグがあったような情報を
見かけましたがこのあたりが原因?
https://gitlab.haskell.org/ghc/ghc/issues/11058
407デフォルトの名無しさん
2019/07/24(水) 23:54:43.53ID:/HKiGEdd 3件もこのスレで本の省略系がアレでワロタ
協調させて省略するとこうなる
凄いH楽しく学ぼう
協調させて省略するとこうなる
凄いH楽しく学ぼう
408デフォルトの名無しさん
2019/08/11(日) 16:09:11.67ID:L0OuEHk+ λの数だけ強くなれるよ〜♫
409デフォルトの名無しさん
2019/08/12(月) 07:07:43.10ID:8tVc9hN7 最近発売された書籍はどうでしたか
410デフォルトの名無しさん
2019/08/12(月) 18:35:53.32ID:EuURpOPT はい
411デフォルトの名無しさん
2019/08/14(水) 23:43:24.45ID:ITFywCVm この??の部分てどう書いたらいいですか?
f :: a -> IO (Maybe b)
g :: b -> IO (Maybe c)
h :: a -> IO (Maybe c)
h x = do
(y :: Maybe b) <- f a
(z :: Maybe c) <- ??
return z
f :: a -> IO (Maybe b)
g :: b -> IO (Maybe c)
h :: a -> IO (Maybe c)
h x = do
(y :: Maybe b) <- f a
(z :: Maybe c) <- ??
return z
412デフォルトの名無しさん
2019/08/15(木) 00:56:45.05ID:2FISIxPr もっといいやり方ありそうですが、自己解決しました。
IO (Maybe)から、いったん MaybeT IO に迂回してからMaybe(Maybe c)を潰すんですね、、
import Control.Monad.Trans.Maybe
f :: a -> IO (Maybe b)
f = undefined
g :: b -> IO (Maybe c)
g = undefined
h :: a -> IO (Maybe c)
h x = do
y <- runMaybeT $ (MaybeT $ f x) >>= (\x -> MaybeT $ g x)
let
contractMaybe :: Maybe (Maybe a) -> Maybe a
contractMaybe aa = case aa of
Just (Just x) -> Just x
_ -> Nothing
return $ contractMaybe y
IO (Maybe)から、いったん MaybeT IO に迂回してからMaybe(Maybe c)を潰すんですね、、
import Control.Monad.Trans.Maybe
f :: a -> IO (Maybe b)
f = undefined
g :: b -> IO (Maybe c)
g = undefined
h :: a -> IO (Maybe c)
h x = do
y <- runMaybeT $ (MaybeT $ f x) >>= (\x -> MaybeT $ g x)
let
contractMaybe :: Maybe (Maybe a) -> Maybe a
contractMaybe aa = case aa of
Just (Just x) -> Just x
_ -> Nothing
return $ contractMaybe y
413デフォルトの名無しさん
2019/08/15(木) 02:33:07.91ID:9FXQJNeU Maybeを潰すのは型的に合っていないと思う
data A
data B
data C
f :: A -> IO (Maybe B)
f = undefined
g :: B -> IO (Maybe C)
g = undefined
h :: A -> IO (Maybe C)
h x = runMaybeT $ MaybeT (f x) >>= (\y -> MaybeT (g y))
h' :: A -> IO (Maybe C)
h' = runMaybeT . (MaybeT . f >=> MaybeT . g)
data A
data B
data C
f :: A -> IO (Maybe B)
f = undefined
g :: B -> IO (Maybe C)
g = undefined
h :: A -> IO (Maybe C)
h x = runMaybeT $ MaybeT (f x) >>= (\y -> MaybeT (g y))
h' :: A -> IO (Maybe C)
h' = runMaybeT . (MaybeT . f >=> MaybeT . g)
414デフォルトの名無しさん
2019/08/15(木) 09:54:21.85ID:2FISIxPr >>413
ありがとうございます。
data宣言してるA B Cだと確かに型チェック通らないですね。
他にもa b cを具体的にStringにしたらダメでした。
a b cバージョンだと通ってるんですが、何か違いがあるのでしょうか?
また、実際とりかかっていたのは、
fが下のwebViewGetDomDocumentで、
gが下のgetBodyでした。
こちらもMaybeつぶしで型チェックは通っています(挙動はまだ確認していませんが)。
webViewGetDomDocument :: WebView -> IO (Maybe Document)
getBody
:: (DocumentClass self, Control.Monad.IO.Class.MonadIO m) =>
self -> m (Maybe Graphics.UI.Gtk.WebKit.Types.HTMLElement)
ありがとうございます。
data宣言してるA B Cだと確かに型チェック通らないですね。
他にもa b cを具体的にStringにしたらダメでした。
a b cバージョンだと通ってるんですが、何か違いがあるのでしょうか?
また、実際とりかかっていたのは、
fが下のwebViewGetDomDocumentで、
gが下のgetBodyでした。
こちらもMaybeつぶしで型チェックは通っています(挙動はまだ確認していませんが)。
webViewGetDomDocument :: WebView -> IO (Maybe Document)
getBody
:: (DocumentClass self, Control.Monad.IO.Class.MonadIO m) =>
self -> m (Maybe Graphics.UI.Gtk.WebKit.Types.HTMLElement)
415デフォルトの名無しさん
2019/08/15(木) 17:40:56.74ID:3wJ+zeP0 h x = do {
y <- f x;
z <- case y of { Nothing -> return Nothing; Just y' -> g y' };
return z
}
なにがMaybe潰しだ
ただの分岐にデザインパターンみたいな名前つけやがって
y <- f x;
z <- case y of { Nothing -> return Nothing; Just y' -> g y' };
return z
}
なにがMaybe潰しだ
ただの分岐にデザインパターンみたいな名前つけやがって
416デフォルトの名無しさん
2019/08/16(金) 13:02:37.84ID:wUgksw8i わざわざzを経由する必要ある?
417デフォルトの名無しさん
2019/08/16(金) 18:54:52.75ID:pXb2X6++ モナド則その2
m >>= return = m
を満たさない半モナド?を想定してる可能性
m >>= return = m
を満たさない半モナド?を想定してる可能性
418デフォルトの名無しさん
2019/08/17(土) 01:26:41.61ID:ES53moma 圏論の知識って役に立つの?
420デフォルトの名無しさん
2019/08/17(土) 03:49:03.33ID:CK+x7f61 全くならないよ
421デフォルトの名無しさん
2019/08/17(土) 10:59:33.48ID:2mj8+539 Haskellと圏論を比較することでHaskellの過激な部分が見える
型を省略する
タプルでできることをカリー化でやる
「任意のfに対しgが存在する」ですむことを高階関数でやる
型を省略する
タプルでできることをカリー化でやる
「任意のfに対しgが存在する」ですむことを高階関数でやる
422デフォルトの名無しさん
2019/08/17(土) 18:25:28.56ID:ljAxaRgk 簡単なことを難しく書くのがHaskell
423デフォルトの名無しさん
2019/08/17(土) 18:36:58.79ID:He41kTu9 ?
424デフォルトの名無しさん
2019/08/18(日) 03:03:18.77ID:AO5DQImr タグつき共用体は簡単だ
C言語にもあった共用体をやめてコールバック地獄になったのはHaskellのせいではない
C言語にもあった共用体をやめてコールバック地獄になったのはHaskellのせいではない
425デフォルトの名無しさん
2019/08/18(日) 20:44:58.36ID:zn243Obk 別スレでこんなの見つけた。
https://insights.dice.com/2019/07/29/5-programming-languages-probably-doomed/
人気なさすぎという事なのかな?
Haskell好きなんだけどなぁ。
https://insights.dice.com/2019/07/29/5-programming-languages-probably-doomed/
人気なさすぎという事なのかな?
Haskell好きなんだけどなぁ。
426デフォルトの名無しさん
2019/08/18(日) 21:34:03.15ID:Ne5INCCb 開発関係者の間で口コミが増えないから使われていないんじゃないか
消えるかもってことらしいがそもそも学術研究目的だからそれでも
構わないってことじゃないかと思うが…
消えるかもってことらしいがそもそも学術研究目的だからそれでも
構わないってことじゃないかと思うが…
427デフォルトの名無しさん
2019/08/18(日) 22:46:17.93ID:PVG4KZY2 何があれば Haskell に人気が出るだろうか
428デフォルトの名無しさん
2019/08/18(日) 23:04:15.06ID:Onid3Fuw C にせまる速度がでたら?
429デフォルトの名無しさん
2019/08/18(日) 23:54:21.76ID:gc7JPYBd キラーアプリ(フレームワーク的な)でしょ
pandocでは不足
pandocでは不足
430デフォルトの名無しさん
2019/08/19(月) 03:52:58.25ID:zjob4//4 Pandoc 初版2006年8月10日 現在スター数 16,396
shellcheck 初版2013年7月24日 現在スター数 16,023
こういう感じのがもっとほしい
shellcheck 初版2013年7月24日 現在スター数 16,023
こういう感じのがもっとほしい
431デフォルトの名無しさん
2019/08/19(月) 07:23:04.62ID:2IiE7zyK そもそも数学の人気のなさをキラーアプリ説で説明できない
宗教では惑星の動きを説明できないみたいに
宗教では惑星の動きを説明できないみたいに
432デフォルトの名無しさん
2019/08/19(月) 07:34:27.76ID:WV8MsfnG オライリーの本にはパーサーは最強と書いてあるが何に使う?
まだパーサー必要じゃないので恩恵味わっていない
まだパーサー必要じゃないので恩恵味わっていない
433デフォルトの名無しさん
2019/08/19(月) 07:41:22.99ID:TcQTkvSK pandocに...
434デフォルトの名無しさん
2019/08/19(月) 11:51:15.13ID:XOuYcf/m パーサはオンラインサービスのやりとりの解析に便利そう。
あるいは溜め込んだビッグデータの解析前処理とか。
あるいは溜め込んだビッグデータの解析前処理とか。
435デフォルトの名無しさん
2019/08/19(月) 15:54:57.04ID:Kn9dUhI/436デフォルトの名無しさん
2019/08/19(月) 16:56:00.26ID:zjob4//4 設定言語の Dhall にもパーサの強さが効いてきてるだろうね。Slackあたりで新しいキラーアプリみたいに言われていたやつ。
ただの設定より強いけどフルセットのプログラミング言語ほどでないために無限ループなどを作れず安全で便利らしい。
現在スター数二千弱
ただの設定より強いけどフルセットのプログラミング言語ほどでないために無限ループなどを作れず安全で便利らしい。
現在スター数二千弱
437デフォルトの名無しさん
2019/08/19(月) 17:27:44.29ID:2IiE7zyK 束縛あり
(m >>= \ x -> return x) = m
束縛なし
(>>= return) = id
(m >>= \ x -> return x) = m
束縛なし
(>>= return) = id
438デフォルトの名無しさん
2019/08/21(水) 02:19:03.88ID:DF21aIsc 関数抽象とかλ抽象とか内容にたいして意味がない説明が長々と続いてると思ったら
単なる無名関数のことだった
最初からそう書けばいいのにわざと理解が遠くなる書き方するのは何だろうね
単なる無名関数のことだった
最初からそう書けばいいのにわざと理解が遠くなる書き方するのは何だろうね
439デフォルトの名無しさん
2019/08/21(水) 03:03:56.38ID:zk1xpAiv >>438
それはラムダ抽象などに興味がある読者を対象にしているからかもしれない。
単に説明が下手なだけかもしれないが。
ちなみに私は前者に当たるので、そういう単語が出てくるとワクワクし、理解がはかどる。
それはラムダ抽象などに興味がある読者を対象にしているからかもしれない。
単に説明が下手なだけかもしれないが。
ちなみに私は前者に当たるので、そういう単語が出てくるとワクワクし、理解がはかどる。
440デフォルトの名無しさん
2019/08/21(水) 08:26:50.91ID:vWB9dk8w441デフォルトの名無しさん
2019/08/21(水) 08:59:06.15ID:MCeqK6x4 会話成り立ってるのか?
442デフォルトの名無しさん
2019/08/21(水) 09:50:43.38ID:NrNhEvfu 具体例を書けないやつは説明が下手なだけだし
具体例が長々と書かれていたら読み飛ばすようなやつは誤読するだけ
少なくとも動的スコープと静的スコープを間違えた例を書くべきだ
これに関しては数学よりも歴史が役に立つ
具体例が長々と書かれていたら読み飛ばすようなやつは誤読するだけ
少なくとも動的スコープと静的スコープを間違えた例を書くべきだ
これに関しては数学よりも歴史が役に立つ
443デフォルトの名無しさん
2019/08/21(水) 14:58:21.32ID:ur92HW83444デフォルトの名無しさん
2019/08/21(水) 20:13:20.77ID:a8Z/37wn >>442
> 具体例を書けないやつは説明が下手なだけだし
具体例を書けない人間は説明下手以前にそもそも十分に正しく理解していないからこそ具体例を書けないんだよ
中途半端な理解しかしていない人間が上手に説明できるはずがないだろうが
> 具体例が長々と書かれていたら読み飛ばすようなやつは誤読するだけ
具体例として長々としか書けないのも困り者だけれどね
説明する側が本当に良く理解できているならば、よほど高度にテクニカルで微妙な概念や定義でない限り
具体例としては簡潔で短い例や反例を挙げられるはずだ
> 少なくとも動的スコープと静的スコープを間違えた例を書くべきだ
> これに関しては数学よりも歴史が役に立つ
Lispの歴史が正にそれを物語っている
当時MITのAI Lab.のJohn McCarthyらによってLispがλ計算に基づいて初めて産み出された時、λ計算の変数のスコープを間違って
(というよりはLispが実装された1960年代前半のコンピュータのメモリ量と処理能力の極めて厳しい制限から)
動的スコープを採用して久しくその間違いを改めなかったのから、Guy Steele, Jr.らによるScheme言語の提案と同処理系の開発および
Lisp諸方言の統一化としてCommon Lispの言語仕様を策定する際に、変数のスコープとしてはSchemeの静的スコープを標準として採用することで
漸くLispプログラミング界で動的スコープでなく静的スコープが当たり前になったという歴史がね
ついでに言っておくと、かつてのLisp界隈での混乱として、言語仕様上の問題としての動的スコープ-vs-静的スコープの問題と
類似の(だが異なる)問題であるshallow_binding-vs-deep_bindingの問題(こちらは言語仕様でなく実装上の問題)とが混同されていて
混乱を招いていた(かなりしっかりしたLispの教科書でも後者を前者と混同して説明していたり、そもそもこれらの問題があることを理解せずに
書かれていたりした
shallow-vs-deepの問題が言語仕様でなく実装上の問題だと正しく且つ明快に言い切った(私の知る限り)最初のLispのテキストは
Lisp実装者だけでなく(当時の)Lispの上級プログラマにとってもバイブルとでも呼ぶべきJohn Allenの“Anatomy of Lisp”
と、まあ長々とした例を批判しながら、長々と書いてしまって申し訳ない
> 具体例を書けないやつは説明が下手なだけだし
具体例を書けない人間は説明下手以前にそもそも十分に正しく理解していないからこそ具体例を書けないんだよ
中途半端な理解しかしていない人間が上手に説明できるはずがないだろうが
> 具体例が長々と書かれていたら読み飛ばすようなやつは誤読するだけ
具体例として長々としか書けないのも困り者だけれどね
説明する側が本当に良く理解できているならば、よほど高度にテクニカルで微妙な概念や定義でない限り
具体例としては簡潔で短い例や反例を挙げられるはずだ
> 少なくとも動的スコープと静的スコープを間違えた例を書くべきだ
> これに関しては数学よりも歴史が役に立つ
Lispの歴史が正にそれを物語っている
当時MITのAI Lab.のJohn McCarthyらによってLispがλ計算に基づいて初めて産み出された時、λ計算の変数のスコープを間違って
(というよりはLispが実装された1960年代前半のコンピュータのメモリ量と処理能力の極めて厳しい制限から)
動的スコープを採用して久しくその間違いを改めなかったのから、Guy Steele, Jr.らによるScheme言語の提案と同処理系の開発および
Lisp諸方言の統一化としてCommon Lispの言語仕様を策定する際に、変数のスコープとしてはSchemeの静的スコープを標準として採用することで
漸くLispプログラミング界で動的スコープでなく静的スコープが当たり前になったという歴史がね
ついでに言っておくと、かつてのLisp界隈での混乱として、言語仕様上の問題としての動的スコープ-vs-静的スコープの問題と
類似の(だが異なる)問題であるshallow_binding-vs-deep_bindingの問題(こちらは言語仕様でなく実装上の問題)とが混同されていて
混乱を招いていた(かなりしっかりしたLispの教科書でも後者を前者と混同して説明していたり、そもそもこれらの問題があることを理解せずに
書かれていたりした
shallow-vs-deepの問題が言語仕様でなく実装上の問題だと正しく且つ明快に言い切った(私の知る限り)最初のLispのテキストは
Lisp実装者だけでなく(当時の)Lispの上級プログラマにとってもバイブルとでも呼ぶべきJohn Allenの“Anatomy of Lisp”
と、まあ長々とした例を批判しながら、長々と書いてしまって申し訳ない
445デフォルトの名無しさん
2019/08/22(木) 09:46:16.96ID:xQsiKIbM 説得力皆無の文章になったな
446デフォルトの名無しさん
2019/08/22(木) 18:48:22.95ID:s6ROoMqI 力が無いなら金で買えばいい
問題は、相手を説得したい者に課金するか自分を説得してほしい者に課金するか
問題は、相手を説得したい者に課金するか自分を説得してほしい者に課金するか
447デフォルトの名無しさん
2019/08/26(月) 15:26:16.91ID:7r1lWQhX モナドから得た値ででかいレコード初期化したいときってなんかいい書き方ない?
do記法で左矢印で一々変数に束縛してからフィールドに代入とかするのめんどい
レコードワイルドカード使うのもアプリカティブスタイルで書くのもなんかいまいちだし
do記法で左矢印で一々変数に束縛してからフィールドに代入とかするのめんどい
レコードワイルドカード使うのもアプリカティブスタイルで書くのもなんかいまいちだし
448デフォルトの名無しさん
2019/08/26(月) 16:58:37.95ID:1YvWSZsw >>447
理想はどういう書き方をしたい?
理想はどういう書き方をしたい?
449デフォルトの名無しさん
2019/08/26(月) 17:56:50.34ID:H+o0BUvr >>448
Hoge { fuga =<< piyo }
こんな感じがいいなあ
レコードワイルドカードだと何してんのかぱっと見よくわからなくなるし
アプリカティブスタイルで書くとフィールドの順番変わったりしたときそれに合わせなきゃいけないのがちょっとだけ嫌
Hoge { fuga =<< piyo }
こんな感じがいいなあ
レコードワイルドカードだと何してんのかぱっと見よくわからなくなるし
アプリカティブスタイルで書くとフィールドの順番変わったりしたときそれに合わせなきゃいけないのがちょっとだけ嫌
450デフォルトの名無しさん
2019/08/26(月) 17:57:34.01ID:H+o0BUvr まちがえた=<<じゃなくて<-
451デフォルトの名無しさん
2019/08/26(月) 18:35:14.67ID:FuRqq0AU そもそも
b <- m
if b then ~
と書かなきゃいけない言語に贅沢言っちゃいかん
b <- m
if b then ~
と書かなきゃいけない言語に贅沢言っちゃいかん
452デフォルトの名無しさん
2019/08/26(月) 20:58:49.90ID:JCuV3Nd8 ifはアプリカティブを使ってはいけない例か
意図的に書いてるなら頭いいな
意図的に書いてるなら頭いいな
453デフォルトの名無しさん
2019/08/27(火) 11:02:46.95ID:LbNJg1Kq C++のnewも一個ずつだ
多変数関数の存在自体がバグみたいなもの
多変数関数の存在自体がバグみたいなもの
454デフォルトの名無しさん
2019/08/27(火) 13:49:23.94ID:aYd+hskG たしかにむずかしいね。
455デフォルトの名無しさん
2019/08/27(火) 14:01:37.09ID:aYd+hskG レコードでなくMap型ならモノイドで足して上書きしていけるのに。
456デフォルトの名無しさん
2019/08/29(木) 12:53:50.13ID:eXCPAcGY Haskellは数学者のおもちゃの域を超えてないな
実用を考えたらライブラリの豊富なPythonに勝るものはない
実用を考えたらライブラリの豊富なPythonに勝るものはない
457デフォルトの名無しさん
2019/08/29(木) 13:19:40.08ID:VY7wxkJm python にまけるなんていわれるとは
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【🐼🇨🇳】「高市総理VS中国」で日本からパンダはゼロに? 上野動物園「パンダ返還期限」まであと4カ月…★2 [BFU★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★5 [樽悶★]
- 【裁判】山上徹也被告の妹「この人は母のふりをした旧統一教会の信者だと思いました」「でも、母の形をしているから突き放せなかった」 [1ゲットロボ★]
- 【速報】 米大使声明 「日本を支えていく」「中国が威圧的手段に訴えるのは断ち難い悪癖」 [お断り★]
- 【7リメイク】『ドラゴンクエストVII Reimagined』では「プレイヤーの時間」を尊重したい…“100時間超”だった原作をテンポ良く現代化 [おっさん友の会★]
- 【安倍晋三元首相銃撃事件】山上被告、45歳まで「生きているべきではなかった」 傍聴席は満席 [ぐれ★]
- 日本が没落したのってネトウヨまとめサイトを取り締まれなかったからだよな [695089791]
- 山上「テレビで統一教会問題取り上げられてるよ「山上母「TVで真実wテレサヨ乙」 [377482965]
- 「あれ?円安加速の戦犯って高市じゃなくて岸田と石破じゃね?」という風潮、急速に高まるwww [759043982]
- 外国人「日本の立ちんぼガールやばすぎるwwwwwwwww [977790669]
- 高市コインまもなく158円 [931948549]
- 珍🏡珍
