IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

Haskellのドット演算子(.)

f . gと書いたときにgの結果がfに渡されるイメージで、Unix|パイプに例えられます。

*> :t (.)
(.) :: (b -> c) -> (a -> b) -> a -> c

表現は正確ではありませんが、渡される結果が「1つ」でなくても、ドット演算子は使えます。

> let f = undefined :: b->c->d
> :t f
f :: b -> c -> d
> let g = undefined :: a->b->c
> :t g
g :: a -> b -> c
> :t f . g
f . g :: a -> c
>

b->c(b->c)をみなして、

f :: b->c->d ------> (b->c)->d

g :: a->b->c ------> a->(b->c)

と考えます。