Haskellのrecordを使っているとこういう事をよくやる。 data Test = T { a :: Int, b :: String } updateA :: Test -> (Int -> Int) -> Test updateA t f = t { a = f (a t) } Test型のデータのaをf関数を使って更新したい。 例えばほら、Stateにはmodify関数があるわけじゃないですか。 modify :: (s -> s) -> State s () という感じで、sを更新する関数を引数にとる。実際とはちょっと違うけど。でもレコードでもこういう感じの事がしたい。 具体的にはこう。 update name f rec = rec { name = f (name rec) } recordのフィールドラベルまで引数として渡したいわけです。これコンパイルできないんですけど