Haskellの基本
emacsはカーソルを合わせるだけで型が表示されるので凄く便利。
. :: (b -> c) -> (a -> b) -> a -> c
みたいな。
この辺の基本的なところでよく悩む・・。
main = f 1 >>= print f n = g $ h n f' n = (g . h) n f'' n = g . h -- $ :: (a -> b) -> a -> b g :: String -> IO String g = return . (++ "a") h :: Int -> String h = show
$ の右に来る関数は、部分適用じゃダメ。
言い換えると、. の右に来る関数は変数を一つ取る関数。
・・・・っていうのは、頭では分かっていたのに実感として持ててなかった。
自分で書いておきながら、さっきの
genericQuery = conn . result
で悩んでしまった。
genericQuery :: Query -> Database -> IO a
になって(実際に書くとエラーになるけど)、Queryに適用させると (Database -> IO a)の関数になり、genericConnectを適用できるようになる。
うーん・・適用っていう言葉の使い方が間違ってるっぽい雰囲気。
本に書いていた
map ($ 0) xs zipWith ($) fs xs
の使い方も謎・・奥が深い。