« Haskell Functor type class 2 | トップページ

2011年4月19日 (火)

Haskell Applicative Monoid

Img_0020_2

Applicativeな型の利点

Applicativeな型の利点として、通常の関数と、値を組み合わせられることがあるらしい。
>(\x y -> x + y) <$> (Just 3) <*> (Just 6)
Just 9

1つ目のラムダ式はただの関数。そこに2つのファンクター値を与えて演算している。

これは通常のFunctor type classのインスタンスではできない。(たぶん)

Monoid

モノイドは、ひとつの二項演算子と単位元を持つ代数的構造、らしい。(Wikipediaより)

二項演算子は、引数が2つ必要な関数(+,÷など)で、
単位元とは、集合の中の任意の要素に対して二項演算しても、もとの値を維持する要素のこと。

あと、結合法則(順序を入れ替えない限り、どこから計算しても良い)を満たす必要がある。

例えば、
 集合:整数
 二項演算子:「+」
 単位元:0

はモノイドである。(たぶん)
証明)
 X + 0 = X
 0 + X = X
 (X + Y) + Z = X + (Y + Z)

Monoid type classの定義



class Monoid m where
mempty :: m
mappend :: m -> m -> m
mconcat :: [m] -> m
mconcat = foldr mappend mempty

memptyが単位元で、mappendが二項演算子かな。

ただ、この定義だけでは、memptyが単位元であることや、
mappendで結合法則が満たされることは保証されない。

これは実装者に任されている。
これに違反したモノイドインスタンスを実装することは可能だが、
数学的な意味のモノイドとして役に立たない。

では、モノイドであることが、どう役に立つのか。

抽象

抽象的な、というのは、日本語では、あいまいな、となってしまうが。

一般的なアイデアや原則、ということで、モノイドの性質を考えれば、
モノイドな具体的な型の値の操作への武器になるのである。

それが何なのかは、まだ知らないがw


|

« Haskell Functor type class 2 | トップページ

Haskell」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1049865/39676492

この記事へのトラックバック一覧です: Haskell Applicative Monoid:

« Haskell Functor type class 2 | トップページ