flip : 引数を逆に適用する関数

flip は二つの引数をとる関数と二つの引数をとってひとつの値を返す。

Prelude> :t flip
flip :: (a -> b -> c) -> b -> a -> c

引数の与えた文字列を連結して出力する関数

Prelude> let func a b = a++":"++b
Prelude> func "aaa" "bbb"
"aaa:bbb"

Prelude> flip func "aaa" "bbb"  -- flipに関数と二つの引数を渡すと逆に適用される。
"bbb:aaa"

引数を逆にする関数を定義する。

Prelude> let func2= flip func
Prelude> func2 "aaa" "bbb"
"bbb:aaa"

forM、forM_ という mapM、mapM_ の引数の順序を逆にした関数があり、それは flip mapM、 flip mapM_ と同等である。

> mapM_ print [1,2,3]  
1
2
3
> forM_  [1,2,3] print  
1
2
3
ghci> flip mapM_  [1,2,3] print  
1
2
3