ログ日記

作業ログと日記とメモ

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

の使い方も謎・・奥が深い。