TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
ExcelVBAで勤務表を作ろう
日下部陽一著 作ってわかるCプログラミング(第6版)
つまりRubyってPerlの後続じゃん?
くだらないアルゴリズムを考えるスレ
Perlは10年後の2023年には消えてなくなる
安価でプログラミングの教科書を作るスレ
Xamarin Part6
Java 高速GUI SWT 3
表計算ソフトは人類の生産性を大きく下げている
■特許庁新システムを作る■

関数型プログラミング言語Haskell Part29


1 :2015/07/14 〜 最終レス :
関数型プログラミング言語 Haskell について語るスレです。

         ,.-―: ̄`ー::::::::::、
       /::::::::::::.::::::::::::::::::::::::::::`::、、
      /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
      l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
      l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
     l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
     l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
     ヽ:::: ´、ひ> ;:  l .<ひ>'  、::::::::/
    ヽ:::::    ̄ .)::;  l  ̄   l::::/    < 毛の壁(岡部健)の話は禁止な
     、:::::..   /:::; .,-、     l:::/、
    ,―::::::::  ゝヽ- ー' 、    l::/,、ヽ
     l,、,、,,:、:: / ,--、,-.、_ l    /::::::,、,、l
   l,、,、,、,、,、::、 `ー ̄-'   /:::::::::::,、,、l
   l,、,、,、,、,、,、::ヽ      /::::::::、,、,、,、,ノ:\

haskell.org (公式サイト)
http://www.haskell.org/

前スレ
関数型プログラミング言語Haskell Part28
http://peace.2ch.sc/test/read.cgi/tech/1428535861/

2 :
関連サイト
(英語)
Haskell - Wikibooks, open books for an open world (ページ内に内容をまとめたPDFあり)
http://en.wikibooks.org/wiki/Haskell

Learn You a Haskell for Great Good! (『すごいHaskellたのしく学ぼう!』の無料オンライン版)
http://learnyouahaskell.com/chapters

Real World Haskell (同名書籍の無料オンライン版)
http://book.realworldhaskell.org/read/

(以下、日本語)
Haskell入門 5ステップ - HaskellWiki (公式サイト内、日本語入門セクション)
https://wiki.haskell.org/Haskell%E5%85%A5%E9%96%80_5%E3%82%B9%E3%83%86%E3%83%83%E3%83%97

Haskell - Wikibooks (先述Wikibooksの日本語版。未編集の項目、多)
http://ja.wikibooks.org/wiki/Haskell

Programming in Haskell
http://www.sampou.org/cgi-bin/haskell.cgi

Haskell のお勉強
http://www.shido.info/hs/

Haskell Programming
http://www.geocities.jp/m_hiroi/func/haskell.html

本物のプログラマはHaskellを使う:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/

[入門]関数プログラミング―質の高いコードをすばやく直感的に書ける!
http://gihyo.jp/dev/feature/01/functional-prog

3 :
過去スレ一覧
27) http://peace.2ch.sc/test/read.cgi/tech/1420718555/
26) http://peace.2ch.sc/test/read.cgi/tech/1406436392/
25) http://peace.2ch.sc/test/read.cgi/tech/1393313450/
24) http://toro.2ch.sc/test/read.cgi/tech/1382705669/
23) http://toro.2ch.sc/test/read.cgi/tech/1376111807/
22) http://toro.2ch.sc/test/read.cgi/tech/1364009659/
21) http://toro.2ch.sc/test/read.cgi/tech/1358702176/

4 :
20) http://toro.2ch.sc/test/read.cgi/tech/1350428908/
19) http://toro.2ch.sc/test/read.cgi/tech/1340760070/
18) http://toro.2ch.sc/test/read.cgi/tech/1331902463/
17) http://toro.2ch.sc/test/read.cgi/tech/1325510368/
16) http://toro.2ch.sc/test/read.cgi/tech/1317958045/
15) http://hibari.2ch.sc/test/read.cgi/tech/1310199414/
14) http://hibari.2ch.sc/test/read.cgi/tech/1299385928/
13) http://hibari.2ch.sc/test/read.cgi/tech/1286706874/
12) http://hibari.2ch.sc/test/read.cgi/tech/1272536128/
11) http://pc12.2ch.sc/test/read.cgi/tech/1252382593/
10) http://pc12.2ch.sc/test/read.cgi/tech/1231861873/
09) http://pc11.2ch.sc/test/read.cgi/tech/1211010089/
08) http://pc11.2ch.sc/test/read.cgi/tech/1193743693/
07) http://pc11.2ch.sc/test/read.cgi/tech/1174211797/
06) http://pc11.2ch.sc/test/read.cgi/tech/1162902266/
05) http://pc8.2ch.sc/test/read.cgi/tech/1149263630/
04) http://pc8.2ch.sc/test/read.cgi/tech/1140717775/
03) http://pc8.2ch.sc/test/read.cgi/tech/1076418993/
02) http://pc2.2ch.sc/test/read.cgi/tech/1013846140/
01) http://pc.2ch.sc/tech/kako/996/996131288.html

5 :
匿名掲示板に
「児童ポルノ単純所持で捕まったら無罪だったとしても社会的に終わるぞ」
という脅し文句を連呼してる人がいる

確か日本IBM会長が痴漢で捕まった時に騒いでたの2chの一部だけで
本当に痴漢で捕まったと思ってる人がほとんどいなかった記憶あるのだが

6 :
AIZU ONLINE JUDGE 競技プログラミング
http://judge.u-aizu.ac.jp/onlinejudge/index.jsp

Haskellで書けるようになった

7 :
>>6
うおおお!!朗報だありがとう!!!

8 :
このスレが本スレだな。例のAAが無いと盛り上がらん。

9 :
>>6
うおおお!やったぜ。

10 :
命令型でないとrangeもmapも書けないのは海外では常識。
そのことは海外のサイト見れば明らか。権威のある人物ならみんな知ってる

11 :
>>10
それはわからんのよ。
バイオコンピュータによって可能になるかもしれんしな。

ただ、今目の前にあるのはバイオコンピュータではないってことが大事なんだろうな。

バイオコンピュータが目の前に来てからHaskellを使おうと考えるのが普通の人だわな。
まあその時には、Haskellは無くなってるだろけどな。

12 :
http://web.archive.org/web/20150715011113/http://qiita.com/nonstarter/items/2763f5d85f2b8df3b18b

13 :
関数型言語におけるmapの定義:

https://www.haskell.org/tutorial/functions.html
A Gentle Introduction to Haskell(やさしいHaskell入門)

"The well-known map function"(よく知られたmap関数)

map :: (a->b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f x : map f xs

基本中の基本です。

14 :
UCLA卒業と、岡部健(kenokabe・毛の壁)を語ろう [転載禁止]©2ch.sc
http://hello.2ch.sc/test/read.cgi/joke/1436928203/

15 :
>>14
もう許してやれよ

16 :
岡部健がQiitaのコメント欄に出没してるぞ〜(歓喜)

http://qiita.com/nonstarter/items/2763f5d85f2b8df3b18b#comment-7d7a978d53ad17b911c5

今度の名前はqiitapostの模様

17 :
とうとう荒らしに墜ちたか

18 :
教育者の端くれなのに、やることが小さいね

19 :
>>1にこんな品のないAAを貼り付けるのはよくない
こんなスレ、僕は認めないからな

20 :
         ,.-―: ̄`ー::::::::::、
       /::::::::::::.::::::::::::::::::::::::::::`::、、
      /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
      l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
      l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
     l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
     l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
     ヽ:::: ´、ひ> ;:  l .<ひ>'  、::::::::/
    ヽ:::::    ̄ .)::;  l  ̄   l::::/    
     、:::::..   /:::; .,-、     l:::/、
    ,―::::::::  ゝヽ- ー' 、    l::/,、ヽ
     l,、,、,,:、:: / ,--、,-.、_ l    /::::::,、,、l
   l,、,、,、,、,、::、 `ー ̄-'   /:::::::::::,、,、l
   l,、,、,、,、,、,、::ヽ      /::::::::、,、,、,、,ノ:\

こんにちは。
私は現在、関数型プログラミングを勉強している者で、まさにこちらのスレで批評されている書籍を読んで、思考を切り替えるためのコツを分かり易く学べたと考えている者です。
様々な視点から学び、理解を深めたいと考えており、こちらのスレも目を通し、関心を持って注目しております。

21 :
mapは命令型でしか書けない。

22 :
おい、Codepadのようなものを「エミュレーター」と解釈できる、なんらかの要素があるとしたらどのあたりなんだ?

23 :
モナドって一言で言うとなんなん?

24 :
世界線

25 :
>>23
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
return :: a -> m a

っていう関数が定義されていてモナド則を満たすもの

26 :
>>25
なるほど
やっぱり岡部健の間違いか。

27 :
foldでmapは書けるが、岡部健はその事と間違えてたんだろうな

28 :
>>25
一言で言うとなんなん?言うてるやん
それともほんとは分かってないから言えないとか?

29 :
なんやこら調子乗んなしばくど

30 :
>>28
「一言」って、どれくらいの長さまで認めてくれるの?

31 :
>>28
自己関手の圏におけるモノイド対象

32 :
>>23,28
順次、反復、分岐のうち分岐を可能にする構造[1]
という説明であれば一般的なプログラマは理解できるはず

[1] http://d.hatena.ne.jp/kazu-yamamoto/20150128/1422413182

33 :
一言で一言でって、一言で言えたら定義がそもそもそうなってるわ!
一言でいっちゃうと必ず嘘を含むので言葉尻をとらえる重箱の隅をつつく言葉遊び勢を気にしておいそれと一言で言えないんだよ
だから一言で言って欲しいなら、『厳密でなく細かな間違いを含んだ私見でいいので、大雑把で直感的に言い直すとどんな風にとらえておけば当たらずとも遠からずですか?』って訊けよな

34 :
>>32
その説明、ずっと分からなかったんだけど、反復を実現するのはApplicativeなの?
単に関数を再帰的に定義すればいいんじゃないの?

35 :
>>31 じゃなくて
>>32
そうそうこういうのがいいんだが、
モナドって、命令型でふつうにできてることを関数型の中でもやりたいってことでOK?
そうすると、IOはいいけどMaybeやListが置いてけぼりになるんじゃないの?

36 :
Maybe/Eitherならエラー時の処理、リストならリスト内包表記におけるフィルター処理が分岐にあたる
他のモナドだと直感的に「分岐」とはみなせないような例もあるかもしれないけど
そのモナドなりの意味で分岐を解釈できるはず

Functorを箱とみなすか文脈とみなすかみたいな話と同じで
一言で言おうとしたときに具体例を選べばどうしたって他で無理のある解釈が出てくるわけで
そこを突っ込みたかったら結局「定義にもどれ」ということになる

37 :
>>36
ああそう、やっぱり>>32はあくまで初心者向けの通俗的解釈に過ぎないわけね。
また振り出しにもどったわw
> そこを突っ込みたかったら結局「定義にもどれ」ということになる
突っ込みたいわけじゃないんだが。。。
「定義にもどれ」ってのは、一見もっともに聞こえるがダメダメよw
「なんでそんな定義なの?」というのが大事なわけで。
それに定義というなら、『Monad は、単なる型クラスの一つで、それ以上でも
それ以下でもありません』でほんとおしまいなんだし

38 :
皆様方
以降、スルーでよろしくおながいします

39 :
モナド変換子が絡むと一気にむずかしくなるなぁ
StateTとIOの複合は頻出っぽいから頑張って身につけたい
なにか参考になるサンプルとかないでしょうか

40 :
https://gist.github.com/anonymous/1944f34703bcb63131d8


これはどちらが正しいんだ?

41 :
最初に無があった
無は有を生んだ
これが全ての真理

42 :
>>40
ちゃんと見て無いけど、
どっちもどっちな感じ…

43 :
>・他方、worldcomponentライブラリを用いてunmount処理を書こうにも、ライブラリ自体が対応していないので、
>状態を完全にリセットしてしまうか、ライブラリの実装の内部に立ち入らない限り、書けません。
>(これはworldcomponentが、unmountされたコンポーネントに対してもforceUpdateを呼び出してしまうせいなので、
>通常のライブラリであれば、そのような問題はありません。なお、基本的再確認ですが、
>Facebook Reactの公式マニュアル https://facebook.github.io/react/docs/component-api.html には "Normally you should try to avoid all uses of forceUpdate()"
>すなわち「通常はforceUpdate()のいかなる使用も避けるべきである」とあります。)

どう考えてもkenokabeのコードが悪いと思うが。

44 :
>>37
うんじゃぁ これも通俗的な話だけど
(>>=) :: m a -> (a -> m b) -> m b
って関数が凄い便利なんだよ scalaだとflatMapなんていったりするけど
monadの力って (>>=) って関数が定義されてる mっていうデータ構造(文脈だの箱だの言われるが)
これをhaskellは副作用を扱うのに使ってるけど
副作用を普通に扱える言語でもmaybeやfutureみたいにエラー時の処理や非同期計算に便利なんだ
もちろん上は全然正確な話ではない

45 :
>>43
これに関してはメモリリークの件でコード改竄を指摘されて
「お前らだってコード改竄してるじゃないか!」
って言いたいんだろうなぁと思う。

事実関係よりも心の平安を保てるかどうかで発言してるっぽいし。

46 :
main = do
print "Hello"

これをghc hello.hsすると生成された実行ファイルのサイズが1MB超えるんですが
こんなものですか?
もっと大量のコードが書けるほどのレベルではないんですが、500行ぐらい書いたらサイズが1GB言っちゃうんじゃないかと心配になりました

47 :
ランタイムの分がでかいからな、なんで線形に増加すると思ったのか

48 :
qtライブラリを使えば、1mbぐらい気にならなくなるじゃろ。

49 :
>>46
jhcを使うとランタイムがないぶんそれだけ小さくなるというのを
岡部究(master_q)さんが一時期熱心に調べてたな。

50 :
>>44 はかなり良い説明だと感じた。
一面を捉えた正確な説明だと思いますよ。

51 :
>>44
> (>>=) :: m a -> (a -> m b) -> m b
うん、これは、たしかに
(a -> b) -> (m a -> mb)
m(a -> b) -> (ma -> mb)
に比べるとやや崩れているところな。そこが人間にとっていいってことか?
だが、IOからMaybeや非決定性まであまりに無節操に広く適用されるところが、
かえって、実はナンセンスなんじゃないの?と思ってしまうな

52 :
取り敢えず初心者にモナドってなんなの?って訊かれたら、オレオレDSLのフレームワークって言っときゃ良いんでしょ?

53 :
モノイド大将がボス

54 :
>>52 その説明いつも全然意味不明

55 :
>>51
まず最初に、モナドと全く関係のない言語が、副作用を無節操に広く適用した
そうして無節操に広がったIOの適用範囲の一部をIOではなくMaybe等で書き直している
Maybeが広くなった分だけIOが狭くなるのでモナド全体の広さは変わらない

56 :
>>48
QtでもさすがにHello出力だけで1MB超えは無い。

57 :
>>55
> まず最初に、・・・副作用を無節操に広く適用した
> IOの適用範囲の一部をIOではなくMaybe等で書き直している
> Maybeが広くなった分だけIOが狭くなる
上の3行の一つ一つが意味分からん。
もう少し補足してくれんか

58 :
>>57
分からんなら後回しにして比較的分かりやすいところを先に解決すればいいと思う
分からんところに拘るのは効率が悪い

59 :
>>58
例えば教科書に出てくるなにかの概念が分からんというようなことじゃなて、
あなたが>>55に書いている文が、あれじゃ意味不明と言ってるんだが。
副作用を無節操に広く適用ってどういうこと?
そしてIOとMaybeしか出てこんがモナドはこの二つだけじゃないし

60 :
>>59
対案を出せばいいと思う

61 :
>>51 のような疑問は、Applicative と Monad のパワーの違いとは?ということであり、
それについてはすごいHaskell に平易な解説があったと思う。

要するに>>= があるおかげで、 モナドから取り出した値を見て、次に行う副作用を作れるってことだ。

62 :
>>60
対案出せと言われましても意味分からんからできません、なんよw わからへん?

>>61
> 要するに>>= があるおかげで、 モナドから取り出した値を見て、次に行う副作用を作れる
それって、 (>>=) :: m a -> (a -> m b) -> m b  言うてるだけやし

63 :
実際monadとapplicativeどっちも使える状況なら
applicative使ったほうがいいよって言われてね?

64 :
和書のどれかに載ってた床下配線が一言だと一番分かりやすいと思った

65 :
>>61
取り出すところまでは同じだが、取り出した後でできることが違う
m a -> (a -> b) -> m b
m a -> (a -> m b) -> m b
-- 超えられない壁 --
m a -> (a -> b) -> b

66 :
つか正直>>51が何言ってるかわからん

>>63
mapでできることをfoldや再帰でやらないってのと同じ発想だね

67 :
>>64
箱やコンテナもそうだがそういう物理的比喩は所詮本物じゃない

>>65
超えられないのか?

68 :
>>67
IOが超えられない
モナドクラスというのはIOと同じクラスになりたいやつが集まってるから

69 :
data DataType = DataI [Int] | DataF [Float] | DataD [Double]
deriving (Eq, Show)
という型があるとします。
型構成子で包まれているリストを取得するにはどうしたらよいでしょうか?
getData :: DataType -> a
getData (DataI a) =a
getData (DataF a) =a
getData (DataD a) =a
getData _ = error "no"
とやってもうまく取り出せません。。

70 :
そりゃ型あわないんだから出来ないよそんなこと

71 :
クソアマR


まさかとは思うが kenokabe先生(a.k.a qiitapost, chimetorch) は React.js を使いさえすればプログラムが FRP になると考えているのだろうか。
https://twitter.com/bolero_MURAKAMI/status/623057115456733184

72 :
>>70
関数のオーバーロードみたいの使ってできるようにないませんかね??

73 :
モナドは型クラス。ある代数データ型に、
それに対応するfmap, ap, bind が揃っているだけ。

だが、その代数データ型の値をデータコンストラクタで出来上がった
構文木と見ると、代数データ型がBNFみたいに見えてくるはずだ。
そのBNFが表現する言語に、まさにfmap, ap, bindが制御構造を
もたらすものとして理解できる。

これが「モナドがDSLフレームワーク」ということの意味。

74 :
>>69
>getData :: DataType -> a

なんでこの型付けがおかしいかわかれば
getDataが作れないことの諦めがつくよ。

75 :
>>72
Haskellに関数のオーバーロードはない
型クラスを変に絡めればあるにはあるけど

どういう状況を想定してその関数がほしいと思ったのかを教えてもらえれば、アドバイスできるかもしれない
基本的にHaskellではそういう関数を必要とすることはないはず

76 :
>>69
class IorForD a where {getData :: DataType -> [a]}
instance IorForD Int where {getData (DataI xs) = xs; getData _ = error "no"}
instance IorForD Float where {getData (DataF xs) = xs; getData _ = error "no"}
instance IorForD Double where {getData (DataD xs) = xs; getData _ = error "no"}

77 :
>>76
確かに記述上できる事になるけど
意味ないなあー

78 :
むしろ

Num a => DataType a
getData :: DataType a -> [a]

みたいにしたらいけない理由が見当たらない。

79 :
>>69
欲しいのは (Num a) => [a] のような型か
fromIntegralとかrealToFracのような
具体型をジェネリックな数に変換する関数だったりしないだろうか

80 :
モナドは一度使えば最後までついて回るしがらみ

81 :
なんだかんだ言っても、モナドって、結局、低級言語のデザインパターンなんだな
一言で言えばそういうことだった

82 :
岡部健がQiitaで発狂続けてて大草原

83 :
http://yomogi.2ch.sc/test/read.cgi/net/1437302243/
GitHub/Qiita/StackOverflowの臭い奴を観察1

84 :
https://gist.github.com/anonymous/10622bea0d37cdd0f59f

85 :
毛の壁の記事を探索するbotコンテストでも開催しろ

86 :
>>82
Qiita荒らしにしか見えない。

87 :
Monadでは
>>= :: ma -> (a -> mb) -> mb
となっているですが、これは、どうして
>>= :: ma -> (ma -> mb) -> mb(つまり普通のapply)
ではだめなのでしょうか?

88 :
>>87

X -> m Y というタイプの関数をたくさん繋げたいという気持ちがあるわけ。mがモナドだとするとき
m でラップされた型、たとえば m Int だとか m () だとかを「mという文脈を付与された型」だと思う
ことにします。m としては IO や Maybe を考えれば考えやすい。

f :: X -> m Y
g :: Y -> m Z

みたいなのがあったとき、fの結果の文脈を引き継いでgを計算したいわけ。たとえば m が
Maybeならば、fの結果は Nothing かもしれないわけ。IOだったら、実行時環境からIOで
ラップされた値を受け取ってるかもしれない。そういうのを受けて g を計算したいわけ。

このとき、>>= があるおかげで

(f x) >>= g

というのが計算できるわけ。「fのあとにg」というのを素朴に、思いついたままにやろうとすると

g ( f x) -- 型が合ってないので illegal

だけど、これは m 一個分型がずれてるからダメ。>>= は、一個分の m を吸収して
適用してくれる。だから、「モナドでラップされた値を取り出して適用してくれる」
みたいな言われ方をするけど、まあ、結果としてそう見えるようなうまい定義が
されてる。(例えばモナド則なんかがそんなうまい定義の背景にあって、そういうのを
どうやって思いついたか説明しようとすると圏論の話しになる。しらんでいい。)

89 :
>>87

ついで。 IO () みたいに、「中身がない」というか、文脈を持ってるという以外に
意味がないモナド値ってのもある。もっと広く言うと状態系のモナドね。

そういう場合、

f :: X -> m ()
g :: Y -> m ()
h :: Z -> m ()

みたいなのを「つなげたい」場合がある。これは入り口が違うので (>>=) は使えない。
だもんで、(>>) なんてのがある。

90 :
>>88
>>= :: ma -> (a -> mb) -> mb
を用意する代わりに、
extract :: ma -> a
みたいなのがあれば、普通の関数適用だけでも同じことができるのではないのですか?

91 :
>>90
「そういうのが作れるならば」あなたのおっしゃるとおり。

具体的に考えてみましょう。 m が Maybe の場合、 extract Nothing は何になりますか

92 :
>>90
よくいろいろなところで、(>>=) は「モナドから値を取り出して関数に適用する」
と言われたりするけど、unit と join を基礎にしてモナドを作ると、このトリックは
理解しやすい。

参考: ttps://ja.wikibooks.org/wiki/Haskell/%E5%9C%8F%E8%AB%96

要するにMがモナドだとして

unit :: a -> M a

join :: M (M a) -> M a

があったとき

(>>=) :: M a -> (a -> M b) -> M b
x' >>= f = join ( (fmap f) x' )

となって、実際には fmap f を適用して、ダブった M を一枚剥がして M b の値を返してる。
(つまりモナドの中から値を引っ張りだす、というような事は実際にはやってないわけ)。

実際にはモナドのなかから値を引っ張りだしてないにも関わらず、引っ張りだして
適用したと「プログラマの心の中で」みなしていても整合してるように書けてしまう。

そういううまいルールをどうやって設定するかみたいな話をするために圏論を借りてきてる。
正直、圏論だとかいってもこのレベルの話ならグラフ理論と難しさは変わらん。
(表示的意味論でも圏論を使うけど、そっちは数学がよほど好きでないと厳しい)。

93 :
>>91
> extract Nothing は何になりますか
なるひどこれは困った。。。

>>92
たしかに、fmap と join を基礎にすれば、 >>= はその一手ですね

>>= :: ma -> (a -> mb) -> mb の中では、特に、
a -> mb の部分がモナドにとって本質的なんだなと思えてきました

94 :
>>92
> そういううまいルールをどうやって設定するかみたいな話をするために圏論を借りてきてる。
「そういううまいルール」とは、どこの事でしょうか?

95 :
>>92
extract :: ma -> a
は存在しない場合があるようですが、
いつも存在しないのですか?
また、join :: m(ma) -> ma
は必ず存在するのですか?

96 :
>>94
そういう上手いルール、はモナド則です。(Functor則と合わせて機能する)。

>>95
たとえば identity モナドなら extract は存在します。大事なのは「一般には、モナド M
に対して extract :: M a -> a が定義できない」ということ。 extract の存在を仮定してると
モナドの一般論にはならないわけです。

join :: M(M a) -> M a

の存在は、モナドの構成要件の一つだと言って差し支えないと思います。
Mがモナドであるかぎり必ず存在する。

参考:ttp://hackage.haskell.org/package/base-4.8.1.0/docs/Control-Monad.html#v:join

(さっき挙げたWikibooksのページには、unit + join でやる流儀と unit + bind
でやる流儀の両方が解説されてます。論理的にはどっちで考えても良い。)

97 :
日本語でおすすめの入門サイトってありますか?

98 :
Haskellの型システムは入門用ではない
静的型と動的型の高度な煽り合いの成果物だ

99 :
>>96 :デフォルトの名無しさん:2015/07/23(木) 14:03:17.98 ID:9NQb4Eqn
> そういう上手いルール、はモナド則です。
うまいというより、ふつうに定義すればモナド則は満たされるのではないですか?

> join :: M(M a) -> M a
> の存在は、モナドの構成要件の一つだと言って差し支えないと思います。
joinがそうであるのにextractがそうでないのはなぜでしょうか?
まあ、oinは不可欠だが、extractはなくても代わりがあるからだということなのでしょうが

100 :
>>99
たとえば http://d.hatena.ne.jp/itto100pen/20090710 に、モナド則の一部が満たされない例があります。
「普通に定義すれば」モナド則は満たされるというのは、経験的には確かにそういう場面が多いかもしれませんが、
状況が込み入ってくれば、いつか「普通にモナドっぽいものを作ったつもり」なのにモナド則を満たさないものに
遭遇するかもしれません。

>joinがそうであるのにextractがそうでないのはなぜでしょうか?
モナドというものがそういうものだからとしか言いようがないですね。

>>93 であなたは
>a -> mb の部分がモナドにとって本質的なんだなと思えてきました

と書いていましたが、この X -> m Y 型の射をつなげてどうにかするための仕組みが
備わっているものをモナドと呼ぶわけです。うまくこのタイプの射をつなげるためには、
ダブったmをうまく剥がしてくれるものが必要で、それが join なわけです。

さっき挙げたWikibooksのページに、join を使って bind を作ったり、bind を使って join を作る
話が載ってますので、参考になさってください。

一方、あなたが書いてる extract :: M a -> a に相当する仕組みを考える場面は
一応あります。それは、 m X -> Y 型の射をうまくつなげてどうにかしたい場合です。
それは「コモナド」と呼ばれてます。(これを積極的に考える場面もあるらしいのですが
私の勉強が追いついていないのでコモナドについてこれ以上語れることはありません。)


100〜のスレッドの続きを読む
C言語なら俺たちに聞け パート0001
くだすれFORTRAN(超初心者用)その6
Excel VBA 質問スレ Part55
オブジェクト指向の活用方法を教えて下さい
将来性ないプログラミング言語。Delphi含まれず安心
くだすれDelphi(超初心者用)その57
アルゴリズム考えるのムズすぎワロタwwww
【DDD】ドメイン駆動設計【エリック・エヴァンス】
.Net Core / Net ASP Core
【Intel】OpenCV総合スレ 5画素目【画像処理】
--------------------
【行動食】山めし総合 24食/杯目 【非常食】 [無断転載禁止]&#169;3ch.net
技術士補 Part14
【鉄道】北鉄車両 ちょっぴり若返り 東京メトロ 日比谷線の「03系」譲渡で“50歳超→30歳”
福島大学陸上競技部・集合です
【グリモア】私立グリモワール魔法学園186年目【稚拙運営】
【JPX日経中小型】日本中小型株投信47
【男性厳禁】■■市販の安いシャンプー・コンディショナーについて話そう! 81■■
赤とんぼ殺人事件【前園泰徳】東邦大出身だった
【徹底討論】 羽生結弦が好きな俺はゲイなのか??165【きゅん】
【宿命のライバル】剛力彩芽V長澤まさみ【低視聴率】
【けものフレンズ2】テレビ東京から大切なお知らせ
東京ブラススタイル3
箱根駅伝予選会51
三木谷(爆) Part5
安倍自民党「経済で、結果を出す」→GDPマイナス成長
【2013年 再演】 ピ ア フ 【大竹しのぶ 主演】
正直プロレスのような低能な娯楽にハマってた時間を返してほしいと思う人
若年性アルツハイマーになった男性(33)、彼女にも会社にも見捨てられる 家族はばっちゃんだけ 神はこんな不平等を作るなよ [389326466]
【TM】東急多摩川・池上線 4【IK】
(o^-')bじゅんじゅんと松田聖子
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼