- 1 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 22:19:28.26 ]
- haskell.org
ttp://www.haskell.org/ 日本語サイト ttp://www.sampou.org/cgi-bin/haskell.cgi ttp://www.shido.info/hs/ 過去ログ 関数型プログラミング言語Haskell Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/ Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/ Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/ Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/ Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/ Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/ Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/ Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/ Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/ Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/ Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/ Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/ Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/ Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/ Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/
- 780 名前:777 mailto:sage [2012/03/03(土) 00:09:57.84 ]
- >>776
> GHCIとかで:typeしてもエラーにしかならないんですけど では、そのすぐ上に Either e も「Functor のインスタンス」だという説明がありますが、 これも :type を試されましたか? エラーが出ますよね だって、Either も (->) と同じように関数や演算子じゃないから 「〜は*のインスタンス」と言った場合、〜の部分には「型」がきます 型の情報は :type では得られません(:type は値の型情報を得るもの) 型の情報は :info などで得られます ただし、正確には :info には型ではなく型構築子を指定しないといけません (たとえば :info Either e ではなく :info Either) と言うことで、((->) e) は単なる型であり、意味上は何も特別なことはありません 試しに :info (->) をすれば、((->) r) 型が Functor のインスタンスだと分かります 正確に言えば (->) が種 * -> * -> * の型で、((->) e) が種 * -> * の型です ((->) e) 型のFunctor実装は処理系依存でライブラリでは公開されていませんが、 次のように解釈できるような実装になっているはずです instance Functor ((->) e) where fmup f g = f . g
- 781 名前:780 mailto:sage [2012/03/03(土) 00:15:43.68 ]
- >>780
くそっ、また訂正だ 誤) fmup f g = f . g 正) fmap f g = f . g
- 782 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:31:28.38 ]
- >>776
instance Functor ((->) e) where fmap = (.)
- 783 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:37:41.58 ]
- サンクス エニウェイ
- 784 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:48:51.17 ]
- >>780 >>782
なるほど、型と値をごっちゃに考えてたせいで要領を得ない質問になってました。 手がかりは頂いたので、もうちょっと考えてみます。 詳しい解説ありがとうございました。
- 785 名前:780 mailto:sage [2012/03/03(土) 00:56:05.16 ]
- >>784
手がかりついでに >>776 > (->)ってのは普通の演算子じゃなくて、型宣言のところに出てくるアレって解釈であってますか? > よくわかってないですが、型より一段階メタな種を扱う演算子みたいな扱い?? (->) が演算子(関数)ではなく、種 * -> * -> * の型であることは先ほど言いましたが、 これは同時に「型構築子」とも暗に言いました((->) e は型構築子ではありませんよ) 意味上は特別なことはありません、単なる型構築子です だから例えば f :: Int -> String -> Bool -> Maybe Char という型の関数は、 本当は f :: (->) Int ((->) String ((->) Bool (Maybe Char))) と型シノニムを書くべきで、 でも何も特別なことをしなくても中置演算子のように書けるのは一種の構文糖衣なんです 本来、アルファベットではなく演算子の形をした識別子を型構築子として使って中置したかったら、 識別子をコロンで始めないといけませんから(:* とか :+: とか :-> とか)
|

|